@atlaskit/editor-plugin-paste
Version:
Paste plugin for @atlaskit/editor-core
97 lines (94 loc) • 4.41 kB
JavaScript
;
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
};
};