@atlaskit/editor-plugin-show-diff
Version:
ShowDiff plugin for @atlaskit/editor-core
48 lines (45 loc) • 2.13 kB
JavaScript
;
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;
});
};