UNPKG

@atlaskit/editor-plugin-table

Version:

Table plugin for the @atlaskit/editor

135 lines (133 loc) 6.06 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.tablesHaveDifferentNoOfRows = exports.tablesHaveDifferentNoOfColumns = exports.tablesHaveDifferentColumnWidths = exports.supportedHeaderRow = exports.isTableNestedInMoreThanOneNode = exports.isTableNested = exports.isIsolating = exports.getTableWidth = exports.containsHeaderRow = exports.containsHeaderColumn = exports.checkIfNumberColumnEnabled = exports.checkIfHeaderRowEnabled = exports.checkIfHeaderColumnEnabled = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _utils = require("@atlaskit/editor-common/utils"); var _tableMap = require("@atlaskit/editor-tables/table-map"); var _utils2 = require("@atlaskit/editor-tables/utils"); var isIsolating = exports.isIsolating = function isIsolating(node) { return !!node.type.spec.isolating; }; var containsHeaderColumn = exports.containsHeaderColumn = function containsHeaderColumn(table) { var map = _tableMap.TableMap.get(table); // Get cell positions for first column. var cellPositions = map.cellsInRect({ left: 0, top: 0, right: 1, bottom: map.height }); for (var i = 0; i < cellPositions.length; i++) { try { var cell = table.nodeAt(cellPositions[i]); if (cell && cell.type !== table.type.schema.nodes.tableHeader) { return false; } } catch (e) { return false; } } return true; }; var containsHeaderRow = exports.containsHeaderRow = function containsHeaderRow(table) { var map = _tableMap.TableMap.get(table); for (var i = 0; i < map.width; i++) { var cell = table.nodeAt(map.map[i]); if (cell && cell.type !== table.type.schema.nodes.tableHeader) { return false; } } return true; }; var checkIfHeaderColumnEnabled = exports.checkIfHeaderColumnEnabled = function checkIfHeaderColumnEnabled(selection) { return filterNearSelection(selection, _utils2.findTable, containsHeaderColumn, false); }; var checkIfHeaderRowEnabled = exports.checkIfHeaderRowEnabled = function checkIfHeaderRowEnabled(selection) { return filterNearSelection(selection, _utils2.findTable, containsHeaderRow, false); }; var checkIfNumberColumnEnabled = exports.checkIfNumberColumnEnabled = function checkIfNumberColumnEnabled(selection) { return filterNearSelection(selection, _utils2.findTable, function (table) { return !!table.attrs.isNumberColumnEnabled; }, false); }; var getTableWidth = exports.getTableWidth = function getTableWidth(node) { return getTableWidths(node).reduce(function (acc, current) { return acc + current; }, 0); }; var tablesHaveDifferentColumnWidths = exports.tablesHaveDifferentColumnWidths = function tablesHaveDifferentColumnWidths(currentTable, previousTable) { var currentTableWidths = getTableWidths(currentTable); var previousTableWidths = getTableWidths(previousTable); if (currentTableWidths.length !== previousTableWidths.length) { return true; } var sameWidths = currentTableWidths.every(function (value, index) { return value === previousTableWidths[index]; }); return sameWidths === false; }; var tablesHaveDifferentNoOfColumns = exports.tablesHaveDifferentNoOfColumns = function tablesHaveDifferentNoOfColumns(currentTable, previousTable) { var prevMap = _tableMap.TableMap.get(previousTable); var currentMap = _tableMap.TableMap.get(currentTable); return prevMap.width !== currentMap.width; }; var tablesHaveDifferentNoOfRows = exports.tablesHaveDifferentNoOfRows = function tablesHaveDifferentNoOfRows(currentTable, previousTable) { var prevMap = _tableMap.TableMap.get(previousTable); var currentMap = _tableMap.TableMap.get(currentTable); return prevMap.height !== currentMap.height; }; function filterNearSelection(selection, findNode, predicate, defaultValue) { var found = findNode(selection); if (!found) { return defaultValue; } return predicate(found.node, found.pos); } function getTableWidths(node) { if (!node.content.firstChild) { return []; } var tableWidths = []; node.content.firstChild.content.forEach(function (cell) { if (Array.isArray(cell.attrs.colwidth)) { var colspan = cell.attrs.colspan || 1; tableWidths.push.apply(tableWidths, (0, _toConsumableArray2.default)(cell.attrs.colwidth.slice(0, colspan))); } }); return tableWidths; } var isTableNested = exports.isTableNested = function isTableNested(state) { var tablePos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var parent = state.doc.resolve(tablePos).parent; var nodeTypes = state.schema.nodes; return parent.type === nodeTypes.layoutColumn || parent.type === nodeTypes.expand || parent.type === nodeTypes.bodiedExtension || parent.type === nodeTypes.extensionFrame || parent.type === nodeTypes.tableHeader || parent.type === nodeTypes.tableCell; }; var isTableNestedInMoreThanOneNode = exports.isTableNestedInMoreThanOneNode = function isTableNestedInMoreThanOneNode(state) { var tablePos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return state.doc.resolve(tablePos).depth > 2; }; var anyChildCellMergedAcrossRow = function anyChildCellMergedAcrossRow(node) { return (0, _utils.mapChildren)(node, function (child) { return child.attrs.rowspan || 0; }).some(function (rowspan) { return rowspan > 1; }); }; /** * Check if a given node is a header row with this definition: * - all children are tableHeader cells * - no table cells have been have merged with other table row cells * * @param node ProseMirror node * @return boolean if it meets definition */ var supportedHeaderRow = exports.supportedHeaderRow = function supportedHeaderRow(node) { var allHeaders = (0, _utils.mapChildren)(node, function (child) { return child.type.name === 'tableHeader'; }).every(Boolean); var someMerged = anyChildCellMergedAcrossRow(node); return allHeaders && !someMerged; };