UNPKG

@atlaskit/editor-plugin-paste

Version:

Paste plugin for @atlaskit/editor-core

97 lines (94 loc) 4.41 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.isNestedInlineNode = exports.isNestedInTable = exports.isInlineNode = exports.isExcludedNode = exports.isEntireNestedParagraphOrHeadingSelected = exports.isCursorSelectionAtTopLevel = exports.getParentNodeDepth = exports.getMultipleSelectionAttributes = exports.containsExcludedNode = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _utils = require("@atlaskit/editor-prosemirror/utils"); var _cellSelection = require("@atlaskit/editor-tables/cell-selection"); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var excludedNodes = ['caption', 'layoutColumn', 'listItem', 'tableHeader', 'tableCell', 'tableRow', 'text', 'placeholder', 'unsupportedBlock', 'unsupportedInline', 'hardBreak', 'confluenceUnsupportedBlock', 'confluenceUnsupportedInline', 'taskItem', 'decisionItem']; var isExcludedNode = exports.isExcludedNode = function isExcludedNode(nodeName) { return excludedNodes.includes(nodeName); }; var isCursorSelectionAtTopLevel = exports.isCursorSelectionAtTopLevel = function isCursorSelectionAtTopLevel(selection) { var from = selection.from, to = selection.to, $from = selection.$from; if (from !== to) { return false; } return $from.parentOffset === 0; }; var inlineNodes = ['emoji', 'date', 'status', 'mention', 'mediaInline', 'inlineCard', 'inlineExtension']; var isInlineNode = exports.isInlineNode = function isInlineNode(nodeName) { return inlineNodes.includes(nodeName); }; var isNestedInlineNode = exports.isNestedInlineNode = function isNestedInlineNode(selection) { if (selection.$from.depth !== 1) { return true; } // check if the node is a part of a larger paragraph or heading var parentSize = selection.$from.parent.content.size; var contentSize = selection.content().size; var parentChildCount = selection.$from.parent.childCount; // when the node was copied and pasted, it won't have extra space the parent has only one child if (parentChildCount === 1) { return false; } // some inline nodes (like date and emoji) when inserted have extra space that is stores as a child if (parentChildCount === 2 && parentSize - contentSize === 1) { return false; } return true; }; var isNestedInTable = exports.isNestedInTable = function isNestedInTable(state) { var schema = state.schema, selection = state.selection; if (selection instanceof _cellSelection.CellSelection) { return false; } var table = schema.nodes.table; var tableNode = (0, _utils.findParentNodeOfTypeClosestToPos)(selection.$from, table); if (!tableNode) { return false; } return true; }; var getParentNodeDepth = exports.getParentNodeDepth = function getParentNodeDepth(selection) { var parentNode = (0, _utils.findParentNodeClosestToPos)(selection.$from, function () { return true; }); if (!parentNode) { return 0; } return parentNode.node.type.name === 'heading' || parentNode.node.type.name === 'paragraph' ? parentNode.depth - 1 : parentNode.depth; }; var isEntireNestedParagraphOrHeadingSelected = exports.isEntireNestedParagraphOrHeadingSelected = function isEntireNestedParagraphOrHeadingSelected(selection) { var $from = selection.$from, $to = selection.$to; return $from.textOffset === 0 && $to.textOffset === 0; }; var containsExcludedNode = exports.containsExcludedNode = function containsExcludedNode(content) { for (var i = 0; i < content.childCount; i++) { var _content$maybeChild; var nodeName = ((_content$maybeChild = content.maybeChild(i)) === null || _content$maybeChild === void 0 ? void 0 : _content$maybeChild.type.name) || ''; if (isExcludedNode(nodeName)) { return true; } } return false; }; var getMultipleSelectionAttributes = exports.getMultipleSelectionAttributes = function getMultipleSelectionAttributes(content) { var nodeTypes = []; if (content.size) { content.forEach(function (node) { nodeTypes.push(node.type.name); }); } return { nodeTypes: (0, _platformFeatureFlags.fg)('platform_editor_track_node_types') ? (0, _toConsumableArray2.default)(new Set(nodeTypes)).sort().join(',') : undefined, hasSelectedMultipleNodes: nodeTypes.length > 1 }; };