UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

145 lines 5.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var prosemirror_1 = require("../../prosemirror"); var tableBaseCommands = require("../../prosemirror/prosemirror-tables"); var _1 = require("./"); var utils_1 = require("./utils"); var analytics_1 = require("../../analytics"); var TAB_FORWARD_DIRECTION = 1; var TAB_BACKWARD_DIRECTION = -1; var createTable = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); if (pluginState.tableDisabled || pluginState.tableElement) { return false; } pluginState.focusEditor(); var table = utils_1.createTableNode(3, 3, state.schema); var tr = state.tr.replaceSelectionWith(table); tr.setSelection(prosemirror_1.Selection.near(tr.doc.resolve(state.selection.from))); dispatch(tr.scrollIntoView()); return true; }; }; var goToNextCell = function (direction) { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); if (!pluginState.tableNode) { return false; } var offset = pluginState.tableStartPos(); if (!offset) { return false; } var map = prosemirror_1.TableMap.get(pluginState.tableNode); var start = pluginState.getCurrentCellStartPos(); var firstCellPos = map.positionAt(0, 0, pluginState.tableNode) + offset + 1; var lastCellPos = map.positionAt(map.height - 1, map.width - 1, pluginState.tableNode) + offset + 1; var event = direction === TAB_FORWARD_DIRECTION ? 'next_cell' : 'previous_cell'; analytics_1.analyticsService.trackEvent("atlassian.editor.format.table." + event + ".keyboard"); if (firstCellPos === start && direction === TAB_BACKWARD_DIRECTION) { pluginState.insertRow(0); return true; } if (lastCellPos === start && direction === TAB_FORWARD_DIRECTION) { pluginState.insertRow(map.height); return true; } if (!pluginState.view.hasFocus()) { pluginState.view.focus(); } var result = tableBaseCommands.goToNextCell(direction)(state, dispatch); // cancel text selection that is created by default if (result) { var latestState = pluginState.view.state; dispatch(latestState.tr.setSelection(prosemirror_1.Selection.near(latestState.selection.$from))); } return result; }; }; var cut = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); pluginState.closeFloatingToolbar(); return true; }; }; var copy = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); pluginState.closeFloatingToolbar(); return true; }; }; var paste = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); pluginState.closeFloatingToolbar(); return true; }; }; var emptyCells = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); if (!pluginState.cellSelection) { return false; } pluginState.resetHoverSelection(); pluginState.emptySelectedCells(); var _a = state.selection.$head, pos = _a.pos, parentOffset = _a.parentOffset; var newPos = pos - parentOffset; pluginState.moveCursorInsideTableTo(newPos); analytics_1.analyticsService.trackEvent('atlassian.editor.format.table.delete_content.keyboard'); return true; }; }; var moveCursorBackward = function () { return function (state, dispatch) { var pluginState = _1.stateKey.getState(state); var $cursor = state.selection.$cursor; // if cursor is in the middle of a text node, do nothing if (!$cursor || (pluginState.view ? !pluginState.view.endOfTextblock('backward', state) : $cursor.parentOffset > 0)) { return false; } // find the node before the cursor var before; var cut; if (!utils_1.isIsolating($cursor.parent)) { for (var i = $cursor.depth - 1; !before && i >= 0; i--) { if ($cursor.index(i) > 0) { cut = $cursor.before(i + 1); before = $cursor.node(i).child($cursor.index(i) - 1); } if (utils_1.isIsolating($cursor.node(i))) { break; } } } // if the node before is not a table node - do nothing if (!before || before.type !== state.schema.nodes.table) { return false; } var tr = state.tr; var lastCellPos = cut - 4; // need to move cursor inside the table to be able to calculate table's offset tr.setSelection(new prosemirror_1.TextSelection(state.doc.resolve(lastCellPos))); var $from = tr.selection.$from; var start = $from.start(-1); var pos = start + $from.parent.nodeSize - 1; // move cursor to the last cell // it doesn't join node before (last cell) with node after (content after the cursor) // due to ridiculous amount of PM code that would have been required to overwrite dispatch(tr.setSelection(new prosemirror_1.TextSelection(state.doc.resolve(pos)))); return true; }; }; exports.default = { createTable: createTable, goToNextCell: goToNextCell, cut: cut, copy: copy, paste: paste, moveCursorBackward: moveCursorBackward, emptyCells: emptyCells }; //# sourceMappingURL=commands.js.map