/** * Table.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import range from '../../../../src/js/base/core/range'; import Table from '../../../../src/js/base/editing/Table'; var expect = chai.expect; describe('base:editing.Table', () => { var table = new Table(); describe('tableWorker', () => { it('should create simple 1x1 table', () => { var resultTable = table.createTable(1, 1); expect(1).to.deep.equal(resultTable.rows.length); expect(1).to.deep.equal(resultTable.rows[0].cells.length); }); it('should delete simple 1x1 table', () => { var $cont = $('
content
'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.deleteTable(rng); expect('').to.deep.equal($cont.html()); }); it('should add simple row to table on top', () => { var $cont = $('
content
'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); expect('

content
').to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on bottom', () => { var $cont = $('
content
'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); expect('
content

').to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on top between two rows', () => { var htmlContent = '
content1
content2
'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); var resultTable = $('
content1
'); $(resultTable).append('
'); $(resultTable).append('content2'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on bottom between two rows', () => { var baseTable = $('
content1
'); $(baseTable).append('content2'); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('
content1
'); $(resultTable).append('
'); $(resultTable).append('content2'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple col to table on left between two cols', () => { var baseTable = $('
'); var baseTr = 'content1content2'; baseTable.append(baseTr); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'left'); var resultTable = $('
'); $(resultTable).append('content1
content2'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple col to table on right between two cols', () => { var baseTable = $('
'); var baseTr = 'content1content2'; baseTable.append(baseTr); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('
'); $(resultTable).append('content1
content2'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete row to table between two other rows', () => { var baseTable = $('
'); var baseTr = 'content1'; baseTr += 'content2'; baseTr += 'content3'; baseTable.append(baseTr); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('
'); $(resultTable).append('content1content3'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete col to table between two other cols', () => { var baseTable = $('
'); var baseTr = 'content1content2content3'; baseTable.append(baseTr); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); $(resultTable).append('content1content3'); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete first col to table with colspan in column with colspan', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1Col2Col3'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col2'; var resultTr2 = 'Col2Col3'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with colspan in column', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1Col2Col3'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col1-SpanCol2'; var resultTr2 = 'Col1Col3'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with colspan in 3 columns', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol4'; var baseTr2 = 'Col1Col2Col3Col4'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col1-SpanCol4'; var resultTr2 = 'Col1Col3Col4'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete first row to table with rowspan in line with rowspan', () => { var baseTable = $('
'); var baseTr1 = 'Row1-SpanCol2'; var baseTr2 = 'Col2'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('
'); var resultTr1AndTr2 = 'Col2'; var resultTr3 = 'Col1Col2'; resultTable.append(resultTr1AndTr2); resultTable.append(resultTr3); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second row to table with rowspan in line without rowspan', () => { var baseTable = $('
'); var baseTr1 = 'Row1-SpanCol2'; var baseTr2 = 'Col2'; var baseTr3 = 'Col2'; var baseTr4 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); baseTable.append(baseTr4); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('
'); var resultTr1 = 'Row1-SpanCol2'; var resultTr3 = 'Col2'; var resultTr4 = 'Col1Col2'; resultTable.append(resultTr1); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with rowspan in 2 rows', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col2'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col1-Span'; var resultTr2 = ''; var resultTr3 = 'Col1'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with rowspan in 2 rows on second row', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col2'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col1-Span'; var resultTr2 = ''; var resultTr3 = 'Col1'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom rowspan cell.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col2'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng); var resultTable = $('
'); var resultTr1 = 'Col1-SpanCol2'; var resultTr2 = 'Col2'; var resultTr3 = '
'; var resultTr4 = 'Col1Col2'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom colspan cell.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-Span'; var baseTr2 = 'Col1Col2'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('
'); var resultTr1 = 'Col1-Span'; var resultTr2 = '
'; var resultTr3 = 'Col1Col2'; var resultTr4 = 'Col1Col2'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row above rowspan cell.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1'; var baseTr3 = 'Col1Col2'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); var resultTable = $('
'); var resultTr1 = '

'; var resultTr2 = 'Col1-SpanCol2'; var resultTr3 = 'Col1'; var resultTr4 = 'Col1Col2'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom rowspan cell and with aditional column.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('
'); var resultTr1 = 'Col1-SpanCol2'; var resultTr2 = 'Col1'; var resultTr3 = '
'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column on right having rowspan cell and with aditional column.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td2'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('
'); var resultTr1 = 'Col1-SpanCol2
'; var resultTr2 = 'Col1
'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column on right having rowspan cell and with aditional column with focus on rowspan column.', () => { var baseTable = $('
'); var baseTr1 = 'Col1-SpanCol2'; var baseTr2 = 'Col1'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('
'); var resultTr1 = 'Col1-Span
Col2'; var resultTr2 = 'Col1'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should remove column after colspan column.', () => { var baseTable = $('
'); var baseTr1 = 'Col1Col2-SpanCol4'; var baseTr2 = 'Col1Col2Col3Col4'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td4'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'Col1Col2-Span'; var resultTr2 = 'Col1Col2Col3'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should remove column before colspan column.', () => { var baseTable = $('
'); var baseTr1 = 'TR1TD1TR1TD2-COLSPAN'; baseTr1 += 'TR1TD4'; var baseTr2 = 'TR2TD1TR2TD2TR2TD3'; baseTr2 += 'TR2TD4'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('
'); var resultTr1 = 'TR1TD2-COLSPAN'; resultTr1 += 'TR1TD4'; var resultTr2 = 'TR2TD2TR2TD3TR2TD4'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column before colspan column.', () => { var baseTable = $('
'); var baseTr1 = 'TR1TD1TR1TD2'; var baseTr2 = 'TR2TD1'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '
' + $(baseTable).html() + '
'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('
'); var resultTr1 = 'TR1TD1
TR1TD2'; var resultTr2 = 'TR2TD1'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '' + $(resultTable).html() + '
'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); }); });