UNPKG

@atlaskit/editor-plugin-show-diff

Version:

ShowDiff plugin for @atlaskit/editor-core

48 lines (45 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDeletedWidgets = void 0; var _decorationKeys = require("./decorations/decorationKeys"); var _main = require("./main"); // prosemirror-view does not type `Decoration.type`; a widget's `type.toDOM` is the node passed to // `Decoration.widget()` (an element or a factory — the `WidgetConstructor` union). // The element a deleted-content widget renders, or undefined if it renders via a factory. var getWidgetElement = function getWidgetElement(decoration) { var _type; var _ref = (_type = decoration.type) !== null && _type !== void 0 ? _type : {}, toDOM = _ref.toDOM; return toDOM instanceof HTMLElement ? toDOM : undefined; }; /** * The rendered deleted-content widgets in `editorState`, optionally restricted to `[from, to]`, * ordered by position. Deleted content is rendered as widget decorations rather than document * nodes, so this is how the element and the position it is anchored at are recovered. * * Kept internal and surfaced only through the `getDeletedWidgets` plugin action, so consumers never * receive the plugin key or the decoration set (which would let them mutate plugin behaviour). */ var getDeletedWidgets = exports.getDeletedWidgets = function getDeletedWidgets(editorState, range) { var _showDiffPluginKey$ge; var decorations = (_showDiffPluginKey$ge = _main.showDiffPluginKey.getState(editorState)) === null || _showDiffPluginKey$ge === void 0 ? void 0 : _showDiffPluginKey$ge.decorations; if (!decorations) { return []; } return decorations.find(range === null || range === void 0 ? void 0 : range.from, range === null || range === void 0 ? void 0 : range.to, function (spec) { return (0, _decorationKeys.isDiffDecorationSpec)(spec) && spec.decorationType === 'widget'; }).reduce(function (widgets, decoration) { var element = getWidgetElement(decoration); if (element) { widgets.push({ element: element, position: decoration.from }); } return widgets; }, []).sort(function (a, b) { return a.position - b.position; }); };