@progress/kendo-editor-common 1.9.3-dev.202209121201 → 1.9.3-dev.202210050740

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { Plugin } from 'prosemirror-state';
2
2
  import { TableMap, tableNodeTypes } from 'prosemirror-tables';
3
3
  import { Decoration, DecorationSet } from 'prosemirror-view';
4
- import { domCellAround, otherResizeHandle, otherResizing, parentNode, parseStyle, setNodeStyle, tableRowResizeKey as key } from './utils';
4
+ import { cellIndexes, domCellAround, otherResizeHandle, otherResizing, parseStyle, setNodeStyle, tableRowResizeKey as key, edgeCell } from './utils';
5
5
  class TableRowView {
6
6
  ignoreMutation(record) {
7
7
  return record.type === 'attributes' && record.attributeName === 'style' && record.target.nodeName === 'TR';
@@ -86,19 +86,20 @@ class ResizeState {
86
86
  function handleMouseMove(view, event, handleWidth) {
87
87
  let pluginState = key.getState(view.state);
88
88
  if (!pluginState.dragging) {
89
- let target = domCellAround(event.target), row = -1;
89
+ let target = domCellAround(event.target), cell = -1;
90
90
  if (target) {
91
- const rowDom = target.parentNode;
92
- let domRect = rowDom.getBoundingClientRect();
93
- if (Math.abs(event.clientY - domRect.top) <= handleWidth && rowDom.rowIndex > 0) {
94
- row = edgeRow(view, event, rowDom.rowIndex - 1);
91
+ const indexes = cellIndexes(target);
92
+ let { top, bottom } = target.getBoundingClientRect();
93
+ if (Math.abs(event.clientY - top) <= handleWidth && indexes.rowIndex > 0) {
94
+ indexes.rowIndex -= target.rowSpan;
95
+ cell = edgeCell(view, event, indexes);
95
96
  }
96
- else if (domRect.bottom - event.clientY > 0 && domRect.bottom - event.clientY <= handleWidth) {
97
- row = edgeRow(view, event, rowDom.rowIndex);
97
+ else if (bottom - event.clientY > 0 && bottom - event.clientY <= handleWidth) {
98
+ cell = edgeCell(view, event, indexes);
98
99
  }
99
100
  }
100
- if (row !== pluginState.activeHandle) {
101
- updateHandle(view, row);
101
+ if (cell !== pluginState.activeHandle) {
102
+ updateHandle(view, cell);
102
103
  }
103
104
  }
104
105
  }
@@ -114,9 +115,9 @@ function handleMouseDown(view, event) {
114
115
  return false;
115
116
  }
116
117
  const doc = view.state.doc;
117
- let $pos = doc.resolve(pluginState.activeHandle);
118
- let row = doc.nodeAt(pluginState.activeHandle);
119
- let table = $pos.parent;
118
+ let $cell = doc.resolve(pluginState.activeHandle);
119
+ let row = $cell.parent;
120
+ let table = $cell.node(-1);
120
121
  let rowHeightStr = parseStyle(row.attrs.style).height;
121
122
  let tableHeight = parseStyle(table.attrs.style).height;
122
123
  let rowHeight = rowHeightStr ? parseFloat(rowHeightStr) : 0;
@@ -154,24 +155,8 @@ function handleMouseDown(view, event) {
154
155
  event.preventDefault();
155
156
  return true;
156
157
  }
157
- function edgeRow(view, event, rowIndex) {
158
- let found = view.posAtCoords({ left: event.clientX, top: event.clientY });
159
- if (!found) {
160
- return -1;
161
- }
162
- let $pos = view.state.doc.resolve(found.pos);
163
- let parentTable = parentNode($pos, n => n.type.spec.tableRole === 'table');
164
- if (parentTable === null) {
165
- return -1;
166
- }
167
- let tablePos = $pos.start(parentTable.depth);
168
- const tableNode = parentTable.node;
169
- const map = TableMap.get(tableNode);
170
- const row = tablePos + map.map[(map.width * rowIndex)] - 1;
171
- return row;
172
- }
173
158
  function draggedHeight(dragging, event) {
174
- let offset = event.clientY - dragging.startY;
159
+ const offset = event.clientY - dragging.startY;
175
160
  return dragging.startHeight.rowHeight + offset;
176
161
  }
177
162
  function updateHandle(view, value) {
@@ -180,9 +165,11 @@ function updateHandle(view, value) {
180
165
  tr.setMeta(key, { setHandle: value });
181
166
  view.dispatch(tr);
182
167
  }
183
- function updateRowHeight(view, tr, rowPos) {
168
+ function updateRowHeight(view, tr, cellPos) {
184
169
  const doc = view.state.doc;
185
- let row = doc.nodeAt(rowPos);
170
+ const $cell = doc.resolve(cellPos);
171
+ const row = $cell.parent;
172
+ const rowPos = $cell.posAtIndex(0) - 1;
186
173
  const dom = view.nodeDOM(rowPos);
187
174
  const win = (dom.ownerDocument && dom.ownerDocument.defaultView) || window;
188
175
  dom.style.height = win.getComputedStyle(dom).height;
@@ -195,13 +182,14 @@ function updateRowHeight(view, tr, rowPos) {
195
182
  tr.setNodeMarkup(tablePos, null, setNodeStyle($pos.parent.attrs, 'height', tableHeight));
196
183
  }
197
184
  }
198
- function displayRowHeight(view, rowPos, height, offset, tableHeight) {
199
- const dom = view.nodeDOM(rowPos);
200
- if (dom) {
201
- dom.style.height = height + 'px';
202
- const win = (dom.ownerDocument && dom.ownerDocument.defaultView) || window;
203
- dom.style.height = win.getComputedStyle(dom).height;
204
- const table = dom.closest('table');
185
+ function displayRowHeight(view, cellPos, height, offset, tableHeight) {
186
+ const cell = view.nodeDOM(cellPos);
187
+ const row = cell && cell.parentNode;
188
+ if (row) {
189
+ row.style.height = height + 'px';
190
+ const win = (row.ownerDocument && row.ownerDocument.defaultView) || window;
191
+ row.style.height = win.getComputedStyle(row).height;
192
+ const table = row.closest('table');
205
193
  const newHeight = (parseFloat(tableHeight) + offset) + 'px';
206
194
  const current = table && table.style.height;
207
195
  if (current && current !== newHeight) {
@@ -210,20 +198,33 @@ function displayRowHeight(view, rowPos, height, offset, tableHeight) {
210
198
  }
211
199
  }
212
200
  }
213
- function handleDecorations(state, pos) {
214
- let decorations = [];
215
- if (typeof pos !== 'number') {
201
+ function handleDecorations(state, cell) {
202
+ const decorations = [];
203
+ if (typeof cell !== 'number') {
216
204
  return DecorationSet.empty;
217
205
  }
218
- let $row = state.doc.resolve(pos), table = $row.parent, map = TableMap.get(table), rowIndex = $row.index($row.depth), start = $row.start($row.depth);
219
- for (let col = 0; col < map.width; col++) {
220
- let index = col + rowIndex * map.width;
221
- let cellPos = map.map[index];
222
- const cell = table.nodeAt(cellPos);
223
- let widgetPos = start + cellPos + (cell ? cell.nodeSize : 0) - 1;
206
+ const $cell = state.doc.resolve(cell), table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);
207
+ const cellsPositions = [];
208
+ const cellPos = cell - start;
209
+ let rowIndex = -1;
210
+ for (let i = 0; i < map.height; i++) {
211
+ cellsPositions.push(map.map.slice(i * map.width, (i * map.width) + map.width));
212
+ if (cellsPositions[i].indexOf(cellPos) !== -1) {
213
+ rowIndex = i;
214
+ }
215
+ }
216
+ const cells = [];
217
+ cellsPositions[rowIndex].forEach((c, i) => {
218
+ if (!cellsPositions[rowIndex + 1] || c !== cellsPositions[rowIndex + 1][i]) {
219
+ cells.push(c);
220
+ }
221
+ });
222
+ cells.forEach((cPos) => {
223
+ const cellNode = table.nodeAt(cPos);
224
+ let widgetPos = start + cPos + (cellNode ? cellNode.nodeSize : 0) - 1;
224
225
  let dom = document.createElement('div');
225
226
  dom.className = 'row-resize-handle';
226
227
  decorations.push(Decoration.widget(widgetPos, dom));
227
- }
228
+ });
228
229
  return DecorationSet.create(state.doc, decorations);
229
230
  }
@@ -197,9 +197,7 @@ export const tableResizing = (options = { node: 'table' }) => {
197
197
  const parent = parentNode(selection.$from, (n) => n.type === nodeType);
198
198
  const node = parent && parent.node;
199
199
  if (node) {
200
- let tableDepth = new Array(selection.$from.depth + 1).fill(0)
201
- .findIndex((_, i) => selection.$from.node(i).type.spec.tableRole === 'table');
202
- const pos = selection.$from.start(tableDepth) - 1;
200
+ const pos = selection.$from.start(parent.depth) - 1;
203
201
  return { node, pos };
204
202
  }
205
203
  return null;
@@ -1,4 +1,5 @@
1
1
  import { PluginKey } from 'prosemirror-state';
2
+ import { TableMap } from 'prosemirror-tables';
2
3
  import { changeStylesString } from '../../utils';
3
4
  export const reAnyValue = /^.+$/;
4
5
  export const parseStyle = (styleText) => {
@@ -57,12 +58,41 @@ export function domCellAround(target) {
57
58
  }
58
59
  return target;
59
60
  }
60
- export function cellIndexes(cell) {
61
- const row = cell.parentNode;
62
- return {
63
- cellIndex: cell.cellIndex,
64
- rowIndex: row.rowIndex
65
- };
61
+ function tableSpansMap(table) {
62
+ const rows = Array.from((table && table.rows) || []);
63
+ const colsCount = Array.from((rows && rows[0] && rows[0].cells) || [])
64
+ .map(c => c.colSpan)
65
+ .reduce((prev, cur) => prev + cur, 0);
66
+ const map = rows.map(() => new Array(colsCount));
67
+ rows.forEach((row, r) => {
68
+ let curColSpan = 0;
69
+ Array.from(row.cells).forEach((c) => {
70
+ for (let colSp = 0; colSp < c.colSpan; colSp++) {
71
+ for (let rowSp = 0; rowSp < c.rowSpan; rowSp++) {
72
+ const ind = map[r + rowSp].findIndex((val, curInd) => curInd >= curColSpan && !val);
73
+ map[r + rowSp][ind] = c;
74
+ }
75
+ curColSpan++;
76
+ }
77
+ });
78
+ });
79
+ return map;
80
+ }
81
+ export function cellIndexes(dataCell) {
82
+ const map = tableSpansMap(dataCell.closest('table'));
83
+ let result = null;
84
+ for (let r = 0; r < map.length; r++) {
85
+ const row = map[r];
86
+ row.forEach((cell, c) => {
87
+ if (dataCell === cell) {
88
+ result = { rowIndex: r, cellIndex: c };
89
+ }
90
+ });
91
+ if (result) {
92
+ break;
93
+ }
94
+ }
95
+ return result || { rowIndex: -1, cellIndex: -1 };
66
96
  }
67
97
  export function parentNode(pos, predicate) {
68
98
  for (let depth = pos.depth; depth > 0; depth--) {
@@ -73,3 +103,19 @@ export function parentNode(pos, predicate) {
73
103
  }
74
104
  return null;
75
105
  }
106
+ export function edgeCell(view, event, indexes) {
107
+ const found = view.posAtCoords({ left: event.clientX, top: event.clientY });
108
+ if (!found) {
109
+ return -1;
110
+ }
111
+ const $pos = view.state.doc.resolve(found.pos);
112
+ const parentTable = parentNode($pos, n => n.type.spec.tableRole === 'table');
113
+ if (parentTable === null) {
114
+ return -1;
115
+ }
116
+ const tablePos = $pos.start(parentTable.depth);
117
+ const tableNode = parentTable.node;
118
+ const map = TableMap.get(tableNode);
119
+ const cell = tablePos + map.map[(map.width * indexes.rowIndex) + indexes.cellIndex];
120
+ return cell;
121
+ }
@@ -1,5 +1,6 @@
1
- import { addRowAfter as pmAddRowAfter, addRowBefore as pmAddRowBefore } from 'prosemirror-tables';
2
- import { rowTypeAttr } from './config/constants';
1
+ import { addRowAfter as pmAddRowAfter, addRowBefore as pmAddRowBefore, addColumnBefore as pmAddColumnBefore, addColumnAfter as pmAddColumnAfter, deleteColumn as pmDeleteColumn, TableMap } from 'prosemirror-tables';
2
+ import { colgroupAttr, rowTypeAttr } from './config/constants';
3
+ import { parseStrColgroup } from './config/schema';
3
4
  /**
4
5
  * Creates a table.
5
6
  * @returns Node
@@ -17,11 +18,14 @@ export const createTable = (nodes, rows, columns) => {
17
18
  }
18
19
  return table.createAndFill(undefined, tableRows);
19
20
  };
21
+ const reTable = /^table$/;
22
+ const reRow = /^table_row$/;
23
+ const reCell = /^table_cell|table_header$/;
20
24
  const closest = (selection, name) => {
21
25
  const pos = selection.$head;
22
26
  for (let i = pos.depth; i > 0; i--) {
23
27
  const node = pos.node(i);
24
- if (node.type.name === name) {
28
+ if (name.test(node.type.name)) {
25
29
  return {
26
30
  pos: pos.before(i),
27
31
  node
@@ -32,8 +36,8 @@ const closest = (selection, name) => {
32
36
  };
33
37
  export const addRowBefore = (state, dispatch) => {
34
38
  const cmdDispatch = dispatch && (tr => {
35
- const row = closest(tr.selection, 'table_row');
36
- const table = closest(tr.selection, 'table');
39
+ const row = closest(tr.selection, reRow);
40
+ const table = closest(tr.selection, reTable);
37
41
  if (row && table && row.node.attrs[rowTypeAttr]) {
38
42
  let index = 0;
39
43
  for (let i = 0; i < table.node.nodeSize; i++) {
@@ -52,7 +56,7 @@ export const addRowBefore = (state, dispatch) => {
52
56
  };
53
57
  export const addRowAfter = (state, dispatch) => {
54
58
  const cmdDispatch = dispatch && (tr => {
55
- const row = closest(tr.selection, 'table_row');
59
+ const row = closest(tr.selection, reRow);
56
60
  if (row && row.node.attrs[rowTypeAttr]) {
57
61
  const from = row.pos + row.node.nodeSize;
58
62
  tr.setNodeMarkup(from, undefined, { [rowTypeAttr]: row.node.attrs[rowTypeAttr] });
@@ -61,4 +65,62 @@ export const addRowAfter = (state, dispatch) => {
61
65
  });
62
66
  return pmAddRowAfter(state, cmdDispatch);
63
67
  };
64
- export { pmAddRowBefore, pmAddRowAfter };
68
+ const columnIndex = (table, selection) => {
69
+ if (!table) {
70
+ return -1;
71
+ }
72
+ const map = TableMap.get(table.node);
73
+ const tableCell = closest(selection, reCell);
74
+ const idx = map.map.indexOf(tableCell.pos - table.pos - 1);
75
+ let colIndex = -1;
76
+ if (idx !== -1) {
77
+ colIndex = idx % map.width;
78
+ }
79
+ return colIndex;
80
+ };
81
+ const addCol = (tr, table, to) => {
82
+ const colIndex = columnIndex(table, tr.selection);
83
+ const colgroup = parseStrColgroup(table.node.attrs[colgroupAttr]);
84
+ colgroup.insertBefore(colgroup.ownerDocument.createElement('col'), colgroup.children[colIndex + to]);
85
+ tr.setNodeMarkup(table.pos, null, Object.assign(Object.assign({}, table.node.attrs), { [colgroupAttr]: colgroup.outerHTML }));
86
+ };
87
+ const deleteCol = (tr, table, colIndex) => {
88
+ const colgroup = parseStrColgroup(table.node.attrs[colgroupAttr]);
89
+ colgroup.removeChild(colgroup.children[colIndex]);
90
+ tr.setNodeMarkup(table.pos, null, Object.assign(Object.assign({}, table.node.attrs), { [colgroupAttr]: colgroup.outerHTML }));
91
+ };
92
+ export const addColumnBefore = (state, dispatch) => {
93
+ const cmdDispatch = dispatch && (tr => {
94
+ const table = closest(tr.selection, reTable);
95
+ if (!table.node.attrs[colgroupAttr]) {
96
+ return dispatch(tr);
97
+ }
98
+ addCol(tr, table, -1);
99
+ return dispatch(tr);
100
+ });
101
+ return pmAddColumnBefore(state, cmdDispatch);
102
+ };
103
+ export const addColumnAfter = (state, dispatch) => {
104
+ const cmdDispatch = dispatch && (tr => {
105
+ const table = closest(tr.selection, reTable);
106
+ if (!table.node.attrs[colgroupAttr]) {
107
+ return dispatch(tr);
108
+ }
109
+ addCol(tr, table, 1);
110
+ return dispatch(tr);
111
+ });
112
+ return pmAddColumnAfter(state, cmdDispatch);
113
+ };
114
+ export const deleteColumn = (state, dispatch) => {
115
+ const colIndex = columnIndex(closest(state.selection, reTable), state.selection);
116
+ const cmdDispatch = dispatch && (tr => {
117
+ const table = closest(tr.selection, reTable);
118
+ if (!table.node.attrs[colgroupAttr]) {
119
+ return dispatch(tr);
120
+ }
121
+ deleteCol(tr, table, colIndex);
122
+ return dispatch(tr);
123
+ });
124
+ return pmDeleteColumn(state, cmdDispatch);
125
+ };
126
+ export { pmAddRowBefore, pmAddRowAfter, pmAddColumnBefore, pmAddColumnAfter, pmDeleteColumn };
@@ -36,7 +36,7 @@ export * from 'prosemirror-keymap';
36
36
  export * from 'prosemirror-model';
37
37
  export * from 'prosemirror-schema-list';
38
38
  export * from 'prosemirror-state';
39
- export { TableEditingOptions, TableMap, TableNodes, TableNodesOptions, TableRect, TableRoles, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, fixTables, fixTablesKey, isInTable, deleteTable, inSameTable, getFromDOM, setDOMAttr, CellAttributes, CellSelectionJSON, CellSelection, Rect, selectedRect, selectionCell, setCellAttr, goToNextCell, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, splitCell, splitCellWithType, GetCellTypeOptions, mergeCells, deleteColumn, deleteRow, rowIsHeader, addRow, addColSpan, addColumn, addColumnAfter, addColumnBefore, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, updateColumnsOnResize, cellAround, findCell, removeColSpan, moveCellForward, nextCell } from 'prosemirror-tables';
39
+ export { TableEditingOptions, TableMap, TableNodes, TableNodesOptions, TableRect, TableRoles, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, fixTables, fixTablesKey, isInTable, deleteTable, inSameTable, getFromDOM, setDOMAttr, CellAttributes, CellSelectionJSON, CellSelection, Rect, selectedRect, selectionCell, setCellAttr, goToNextCell, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, splitCell, splitCellWithType, GetCellTypeOptions, mergeCells, deleteRow, rowIsHeader, addRow, addColSpan, addColumn, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, updateColumnsOnResize, cellAround, findCell, removeColSpan, moveCellForward, nextCell } from 'prosemirror-tables';
40
40
  export * from 'prosemirror-transform';
41
41
  export * from 'prosemirror-view';
42
- export { createTable, addRowAfter, addRowBefore, pmAddRowAfter, pmAddRowBefore } from './table';
42
+ export { createTable, addRowAfter, addRowBefore, addColumnBefore, addColumnAfter, deleteColumn, pmAddColumnBefore, pmAddColumnAfter, pmAddRowAfter, pmAddRowBefore, pmDeleteColumn } from './table';
package/dist/npm/main.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.expandToWordWrap = exports.expandSelection = exports.selectedLineTextOnly = exports.getNodeFromSelection = exports.getSelectionText = exports.hasSameMarkup = exports.liftBlockquote = exports.blockquote = exports.listStyle = exports.toggleList = exports.toggleUnorderedList = exports.toggleOrderedList = exports.indentBlocks = exports.canBeIndented = exports.isIndented = exports.canOutdentAsListItem = exports.outdent = exports.canIndentAsListItem = exports.indent = exports.selectionMarks = exports.cleanMarks = exports.removeAllMarks = exports.getActiveMarks = exports.getMark = exports.hasMark = exports.cleanTextBlockFormatting = exports.blockNodes = exports.changeTextBlock = exports.parentBlockFormat = exports.getBlockFormats = exports.formatBlockElements = exports.activeNode = exports.hasNode = exports.cleanFormatting = exports.isAligned = exports.alignBlocks = exports.insertImage = exports.insertText = exports.removeLink = exports.applyLink = exports.toggleInlineFormat = exports.getInlineStyles = exports.applyInlineStyle = exports.pmDocToFragment = exports.domToPmDoc = exports.htmlToFragment = exports.trimWhitespace = exports.parseContent = exports.setHtml = exports.getHtml = void 0;
4
4
  exports.tableEditingKey = exports.tableEditing = exports.TableMap = exports.tableRowResizeKey = exports.tableColumnResizeKey = exports.tableResizeKey = exports.tableResizing = exports.caretColorKey = exports.caretColor = exports.imageResizeKey = exports.imageResizing = exports.textHighlightKey = exports.textHighlight = exports.spacesFix = exports.placeholder = exports.replaceAll = exports.replace = exports.findAll = exports.findAt = exports.find = exports.convertMsLists = exports.replaceImageSourcesFromRtf = exports.removeAttribute = exports.sanitizeStyleAttr = exports.sanitizeClassAttr = exports.pasteCleanup = exports.removeTag = exports.removeComments = exports.sanitize = exports.link = exports.superscript = exports.subscript = exports.strikethrough = exports.underline = exports.italic = exports.bold = exports.buildListKeymap = exports.buildKeymap = exports.marks = exports.nodes = exports.outdentRules = exports.indentRules = exports.alignRemoveRules = exports.alignJustifyRules = exports.alignRightRules = exports.alignCenterRules = exports.alignLeftRules = exports.indentHtml = exports.insertNode = exports.canInsert = void 0;
5
- exports.pmAddRowBefore = exports.pmAddRowAfter = exports.addRowBefore = exports.addRowAfter = exports.createTable = exports.nextCell = exports.moveCellForward = exports.removeColSpan = exports.findCell = exports.cellAround = exports.updateColumnsOnResize = exports.columnResizingPluginKey = exports.columnResizing = exports.columnIsHeader = exports.colCount = exports.addColumnBefore = exports.addColumnAfter = exports.addColumn = exports.addColSpan = exports.addRow = exports.rowIsHeader = exports.deleteRow = exports.deleteColumn = exports.mergeCells = exports.splitCellWithType = exports.splitCell = exports.toggleHeaderRow = exports.toggleHeaderColumn = exports.toggleHeaderCell = exports.toggleHeader = exports.goToNextCell = exports.setCellAttr = exports.selectionCell = exports.selectedRect = exports.CellSelection = exports.inSameTable = exports.deleteTable = exports.isInTable = exports.fixTablesKey = exports.fixTables = exports.tableNodes = exports.tableNodeTypes = void 0;
5
+ exports.pmDeleteColumn = exports.pmAddRowBefore = exports.pmAddRowAfter = exports.pmAddColumnAfter = exports.pmAddColumnBefore = exports.deleteColumn = exports.addColumnAfter = exports.addColumnBefore = exports.addRowBefore = exports.addRowAfter = exports.createTable = exports.nextCell = exports.moveCellForward = exports.removeColSpan = exports.findCell = exports.cellAround = exports.updateColumnsOnResize = exports.columnResizingPluginKey = exports.columnResizing = exports.columnIsHeader = exports.colCount = exports.addColumn = exports.addColSpan = exports.addRow = exports.rowIsHeader = exports.deleteRow = exports.mergeCells = exports.splitCellWithType = exports.splitCell = exports.toggleHeaderRow = exports.toggleHeaderColumn = exports.toggleHeaderCell = exports.toggleHeader = exports.goToNextCell = exports.setCellAttr = exports.selectionCell = exports.selectedRect = exports.CellSelection = exports.inSameTable = exports.deleteTable = exports.isInTable = exports.fixTablesKey = exports.fixTables = exports.tableNodes = exports.tableNodeTypes = void 0;
6
6
  var tslib_1 = require("tslib");
7
7
  var source_1 = require("./source");
8
8
  Object.defineProperty(exports, "getHtml", { enumerable: true, get: function () { return source_1.getHtml; } });
@@ -162,14 +162,11 @@ Object.defineProperty(exports, "toggleHeaderRow", { enumerable: true, get: funct
162
162
  Object.defineProperty(exports, "splitCell", { enumerable: true, get: function () { return prosemirror_tables_1.splitCell; } });
163
163
  Object.defineProperty(exports, "splitCellWithType", { enumerable: true, get: function () { return prosemirror_tables_1.splitCellWithType; } });
164
164
  Object.defineProperty(exports, "mergeCells", { enumerable: true, get: function () { return prosemirror_tables_1.mergeCells; } });
165
- Object.defineProperty(exports, "deleteColumn", { enumerable: true, get: function () { return prosemirror_tables_1.deleteColumn; } });
166
165
  Object.defineProperty(exports, "deleteRow", { enumerable: true, get: function () { return prosemirror_tables_1.deleteRow; } });
167
166
  Object.defineProperty(exports, "rowIsHeader", { enumerable: true, get: function () { return prosemirror_tables_1.rowIsHeader; } });
168
167
  Object.defineProperty(exports, "addRow", { enumerable: true, get: function () { return prosemirror_tables_1.addRow; } });
169
168
  Object.defineProperty(exports, "addColSpan", { enumerable: true, get: function () { return prosemirror_tables_1.addColSpan; } });
170
169
  Object.defineProperty(exports, "addColumn", { enumerable: true, get: function () { return prosemirror_tables_1.addColumn; } });
171
- Object.defineProperty(exports, "addColumnAfter", { enumerable: true, get: function () { return prosemirror_tables_1.addColumnAfter; } });
172
- Object.defineProperty(exports, "addColumnBefore", { enumerable: true, get: function () { return prosemirror_tables_1.addColumnBefore; } });
173
170
  Object.defineProperty(exports, "colCount", { enumerable: true, get: function () { return prosemirror_tables_1.colCount; } });
174
171
  Object.defineProperty(exports, "columnIsHeader", { enumerable: true, get: function () { return prosemirror_tables_1.columnIsHeader; } });
175
172
  Object.defineProperty(exports, "columnResizing", { enumerable: true, get: function () { return prosemirror_tables_1.columnResizing; } });
@@ -186,5 +183,11 @@ var table_1 = require("./table");
186
183
  Object.defineProperty(exports, "createTable", { enumerable: true, get: function () { return table_1.createTable; } });
187
184
  Object.defineProperty(exports, "addRowAfter", { enumerable: true, get: function () { return table_1.addRowAfter; } });
188
185
  Object.defineProperty(exports, "addRowBefore", { enumerable: true, get: function () { return table_1.addRowBefore; } });
186
+ Object.defineProperty(exports, "addColumnBefore", { enumerable: true, get: function () { return table_1.addColumnBefore; } });
187
+ Object.defineProperty(exports, "addColumnAfter", { enumerable: true, get: function () { return table_1.addColumnAfter; } });
188
+ Object.defineProperty(exports, "deleteColumn", { enumerable: true, get: function () { return table_1.deleteColumn; } });
189
+ Object.defineProperty(exports, "pmAddColumnBefore", { enumerable: true, get: function () { return table_1.pmAddColumnBefore; } });
190
+ Object.defineProperty(exports, "pmAddColumnAfter", { enumerable: true, get: function () { return table_1.pmAddColumnAfter; } });
189
191
  Object.defineProperty(exports, "pmAddRowAfter", { enumerable: true, get: function () { return table_1.pmAddRowAfter; } });
190
192
  Object.defineProperty(exports, "pmAddRowBefore", { enumerable: true, get: function () { return table_1.pmAddRowBefore; } });
193
+ Object.defineProperty(exports, "pmDeleteColumn", { enumerable: true, get: function () { return table_1.pmDeleteColumn; } });
@@ -95,11 +95,11 @@ function handleMouseMove(view, event, handleWidth) {
95
95
  var indexes = utils_1.cellIndexes(target);
96
96
  var _a = target.getBoundingClientRect(), left = _a.left, right = _a.right;
97
97
  if (Math.abs(event.clientX - left) <= handleWidth && indexes.cellIndex > 0) {
98
- indexes.cellIndex--;
99
- cell = edgeCell(view, event, indexes);
98
+ indexes.cellIndex -= target.colSpan;
99
+ cell = utils_1.edgeCell(view, event, indexes);
100
100
  }
101
101
  else if (right - event.clientX > 0 && right - event.clientX <= handleWidth) {
102
- cell = edgeCell(view, event, indexes);
102
+ cell = utils_1.edgeCell(view, event, indexes);
103
103
  }
104
104
  }
105
105
  if (cell !== pluginState.activeHandle) {
@@ -191,22 +191,6 @@ function handleMouseDown(view, event, cellMinWidth) {
191
191
  event.preventDefault();
192
192
  return true;
193
193
  }
194
- function edgeCell(view, event, indexes) {
195
- var found = view.posAtCoords({ left: event.clientX, top: event.clientY });
196
- if (!found) {
197
- return -1;
198
- }
199
- var $pos = view.state.doc.resolve(found.pos);
200
- var parentTable = utils_1.parentNode($pos, function (n) { return n.type.spec.tableRole === 'table'; });
201
- if (parentTable === null) {
202
- return -1;
203
- }
204
- var tablePos = $pos.start(parentTable.depth);
205
- var tableNode = parentTable.node;
206
- var map = prosemirror_tables_1.TableMap.get(tableNode);
207
- var cell = tablePos + map.map[(map.width * indexes.rowIndex) + indexes.cellIndex];
208
- return cell;
209
- }
210
194
  function draggedWidth(dragging, event, cellMinWidth) {
211
195
  var offset = event.clientX - dragging.startX;
212
196
  return Math.max(cellMinWidth, dragging.startWidth + offset);
@@ -231,8 +215,8 @@ function updateColumnWidth(view, tr, cell, _width) {
231
215
  var tableDomWidth = tableDom.style.width;
232
216
  if (tableDom && tableDomWidth && utils_1.parseStyle(attrs.style).width !== tableDomWidth) {
233
217
  attrs = utils_1.setNodeStyle(attrs, 'width', tableDomWidth);
234
- tr.setNodeMarkup(tablePos, null, attrs);
235
218
  }
219
+ tr.setNodeMarkup(tablePos, null, attrs);
236
220
  }
237
221
  function displayColumnWidth(view, cell, width, _cellMinWidth) {
238
222
  var $cell = view.state.doc.resolve(cell);
@@ -258,20 +242,27 @@ function handleDecorations(state, cell) {
258
242
  var decorations = [];
259
243
  var $cell = state.doc.resolve(cell);
260
244
  var table = $cell.node(-1), map = prosemirror_tables_1.TableMap.get(table), start = $cell.start(-1);
261
- var col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan;
262
- for (var row = 0; row < map.height; row++) {
263
- var index = col + row * map.width - 1;
264
- // For positions that are have either a different cell or the end
265
- // of the table to their right, and either the top of the table or
266
- // a different cell above them, add a decoration
267
- if ((col === map.width || map.map[index] !== map.map[index + 1]) &&
268
- (row === 0 || map.map[index - 1] !== map.map[index - 1 - map.width])) {
269
- var cellPos = map.map[index];
270
- var pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;
271
- var dom = document.createElement('div');
272
- dom.className = 'column-resize-handle';
273
- decorations.push(prosemirror_view_1.Decoration.widget(pos, dom));
245
+ var cellsPositions = [];
246
+ var cellPos = cell - start;
247
+ var column = -1;
248
+ for (var i = 0; i < map.height; i++) {
249
+ cellsPositions.push(map.map.slice(i * map.width, (i * map.width) + map.width));
250
+ if (column === -1) {
251
+ column = cellsPositions[i].lastIndexOf(cellPos);
274
252
  }
275
253
  }
254
+ var cells = [];
255
+ cellsPositions.forEach(function (row) {
256
+ var c = row[column];
257
+ if (row[column] !== row[column + 1]) {
258
+ cells.push(c);
259
+ }
260
+ });
261
+ cells.forEach((function (cPos) {
262
+ var pos = start + cPos + table.nodeAt(cPos).nodeSize - 1;
263
+ var dom = document.createElement('div');
264
+ dom.className = 'column-resize-handle';
265
+ decorations.push(prosemirror_view_1.Decoration.widget(pos, dom));
266
+ }));
276
267
  return prosemirror_view_1.DecorationSet.create(state.doc, decorations);
277
268
  }
@@ -94,19 +94,20 @@ var ResizeState = /** @class */ (function () {
94
94
  function handleMouseMove(view, event, handleWidth) {
95
95
  var pluginState = utils_1.tableRowResizeKey.getState(view.state);
96
96
  if (!pluginState.dragging) {
97
- var target = utils_1.domCellAround(event.target), row = -1;
97
+ var target = utils_1.domCellAround(event.target), cell = -1;
98
98
  if (target) {
99
- var rowDom = target.parentNode;
100
- var domRect = rowDom.getBoundingClientRect();
101
- if (Math.abs(event.clientY - domRect.top) <= handleWidth && rowDom.rowIndex > 0) {
102
- row = edgeRow(view, event, rowDom.rowIndex - 1);
99
+ var indexes = utils_1.cellIndexes(target);
100
+ var _a = target.getBoundingClientRect(), top_1 = _a.top, bottom = _a.bottom;
101
+ if (Math.abs(event.clientY - top_1) <= handleWidth && indexes.rowIndex > 0) {
102
+ indexes.rowIndex -= target.rowSpan;
103
+ cell = utils_1.edgeCell(view, event, indexes);
103
104
  }
104
- else if (domRect.bottom - event.clientY > 0 && domRect.bottom - event.clientY <= handleWidth) {
105
- row = edgeRow(view, event, rowDom.rowIndex);
105
+ else if (bottom - event.clientY > 0 && bottom - event.clientY <= handleWidth) {
106
+ cell = utils_1.edgeCell(view, event, indexes);
106
107
  }
107
108
  }
108
- if (row !== pluginState.activeHandle) {
109
- updateHandle(view, row);
109
+ if (cell !== pluginState.activeHandle) {
110
+ updateHandle(view, cell);
110
111
  }
111
112
  }
112
113
  }
@@ -122,9 +123,9 @@ function handleMouseDown(view, event) {
122
123
  return false;
123
124
  }
124
125
  var doc = view.state.doc;
125
- var $pos = doc.resolve(pluginState.activeHandle);
126
- var row = doc.nodeAt(pluginState.activeHandle);
127
- var table = $pos.parent;
126
+ var $cell = doc.resolve(pluginState.activeHandle);
127
+ var row = $cell.parent;
128
+ var table = $cell.node(-1);
128
129
  var rowHeightStr = utils_1.parseStyle(row.attrs.style).height;
129
130
  var tableHeight = utils_1.parseStyle(table.attrs.style).height;
130
131
  var rowHeight = rowHeightStr ? parseFloat(rowHeightStr) : 0;
@@ -162,22 +163,6 @@ function handleMouseDown(view, event) {
162
163
  event.preventDefault();
163
164
  return true;
164
165
  }
165
- function edgeRow(view, event, rowIndex) {
166
- var found = view.posAtCoords({ left: event.clientX, top: event.clientY });
167
- if (!found) {
168
- return -1;
169
- }
170
- var $pos = view.state.doc.resolve(found.pos);
171
- var parentTable = utils_1.parentNode($pos, function (n) { return n.type.spec.tableRole === 'table'; });
172
- if (parentTable === null) {
173
- return -1;
174
- }
175
- var tablePos = $pos.start(parentTable.depth);
176
- var tableNode = parentTable.node;
177
- var map = prosemirror_tables_1.TableMap.get(tableNode);
178
- var row = tablePos + map.map[(map.width * rowIndex)] - 1;
179
- return row;
180
- }
181
166
  function draggedHeight(dragging, event) {
182
167
  var offset = event.clientY - dragging.startY;
183
168
  return dragging.startHeight.rowHeight + offset;
@@ -188,9 +173,11 @@ function updateHandle(view, value) {
188
173
  tr.setMeta(utils_1.tableRowResizeKey, { setHandle: value });
189
174
  view.dispatch(tr);
190
175
  }
191
- function updateRowHeight(view, tr, rowPos) {
176
+ function updateRowHeight(view, tr, cellPos) {
192
177
  var doc = view.state.doc;
193
- var row = doc.nodeAt(rowPos);
178
+ var $cell = doc.resolve(cellPos);
179
+ var row = $cell.parent;
180
+ var rowPos = $cell.posAtIndex(0) - 1;
194
181
  var dom = view.nodeDOM(rowPos);
195
182
  var win = (dom.ownerDocument && dom.ownerDocument.defaultView) || window;
196
183
  dom.style.height = win.getComputedStyle(dom).height;
@@ -203,13 +190,14 @@ function updateRowHeight(view, tr, rowPos) {
203
190
  tr.setNodeMarkup(tablePos, null, utils_1.setNodeStyle($pos.parent.attrs, 'height', tableHeight));
204
191
  }
205
192
  }
206
- function displayRowHeight(view, rowPos, height, offset, tableHeight) {
207
- var dom = view.nodeDOM(rowPos);
208
- if (dom) {
209
- dom.style.height = height + 'px';
210
- var win = (dom.ownerDocument && dom.ownerDocument.defaultView) || window;
211
- dom.style.height = win.getComputedStyle(dom).height;
212
- var table = dom.closest('table');
193
+ function displayRowHeight(view, cellPos, height, offset, tableHeight) {
194
+ var cell = view.nodeDOM(cellPos);
195
+ var row = cell && cell.parentNode;
196
+ if (row) {
197
+ row.style.height = height + 'px';
198
+ var win = (row.ownerDocument && row.ownerDocument.defaultView) || window;
199
+ row.style.height = win.getComputedStyle(row).height;
200
+ var table = row.closest('table');
213
201
  var newHeight = (parseFloat(tableHeight) + offset) + 'px';
214
202
  var current = table && table.style.height;
215
203
  if (current && current !== newHeight) {
@@ -218,20 +206,33 @@ function displayRowHeight(view, rowPos, height, offset, tableHeight) {
218
206
  }
219
207
  }
220
208
  }
221
- function handleDecorations(state, pos) {
209
+ function handleDecorations(state, cell) {
222
210
  var decorations = [];
223
- if (typeof pos !== 'number') {
211
+ if (typeof cell !== 'number') {
224
212
  return prosemirror_view_1.DecorationSet.empty;
225
213
  }
226
- var $row = state.doc.resolve(pos), table = $row.parent, map = prosemirror_tables_1.TableMap.get(table), rowIndex = $row.index($row.depth), start = $row.start($row.depth);
227
- for (var col = 0; col < map.width; col++) {
228
- var index = col + rowIndex * map.width;
229
- var cellPos = map.map[index];
230
- var cell = table.nodeAt(cellPos);
231
- var widgetPos = start + cellPos + (cell ? cell.nodeSize : 0) - 1;
214
+ var $cell = state.doc.resolve(cell), table = $cell.node(-1), map = prosemirror_tables_1.TableMap.get(table), start = $cell.start(-1);
215
+ var cellsPositions = [];
216
+ var cellPos = cell - start;
217
+ var rowIndex = -1;
218
+ for (var i = 0; i < map.height; i++) {
219
+ cellsPositions.push(map.map.slice(i * map.width, (i * map.width) + map.width));
220
+ if (cellsPositions[i].indexOf(cellPos) !== -1) {
221
+ rowIndex = i;
222
+ }
223
+ }
224
+ var cells = [];
225
+ cellsPositions[rowIndex].forEach(function (c, i) {
226
+ if (!cellsPositions[rowIndex + 1] || c !== cellsPositions[rowIndex + 1][i]) {
227
+ cells.push(c);
228
+ }
229
+ });
230
+ cells.forEach(function (cPos) {
231
+ var cellNode = table.nodeAt(cPos);
232
+ var widgetPos = start + cPos + (cellNode ? cellNode.nodeSize : 0) - 1;
232
233
  var dom = document.createElement('div');
233
234
  dom.className = 'row-resize-handle';
234
235
  decorations.push(prosemirror_view_1.Decoration.widget(widgetPos, dom));
235
- }
236
+ });
236
237
  return prosemirror_view_1.DecorationSet.create(state.doc, decorations);
237
238
  }