UNPKG

@atlaskit/editor-plugin-show-diff

Version:

ShowDiff plugin for @atlaskit/editor-core

57 lines (54 loc) 2.17 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.stepIsValidAttrChange = exports.getAttrChangeRanges = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _steps = require("@atlaskit/adf-schema/steps"); var _transform = require("@atlaskit/editor-prosemirror/transform"); var filterUndefined = function filterUndefined(x) { return !!x; }; // Currently allow attributes that indicats a change in media image var allowedAttrs = ['id', 'collection', 'url']; var getAttrChangeRanges = exports.getAttrChangeRanges = function getAttrChangeRanges(doc, steps) { return steps.map(function (step) { if (step instanceof _transform.AttrStep && allowedAttrs.includes(step.attr) || step instanceof _steps.SetAttrsStep && step.attrs && (0, _toConsumableArray2.default)(Object.keys(step.attrs)).some(function (v) { return allowedAttrs.includes(v); })) { var $pos = doc.resolve(step.pos); if ($pos.parent.type === doc.type.schema.nodes.mediaSingle) { var startPos = $pos.pos + $pos.parentOffset; return { fromB: startPos, toB: startPos + $pos.parent.nodeSize - 1 }; } } return undefined; }).filter(filterUndefined); }; /** * Check if the step was a valid attr change and affected the doc * * @param step Attr step to test * @param beforeDoc Doc before the step * @param afterDoc Doc after the step * @returns Boolean if the change should show a decoration */ var stepIsValidAttrChange = exports.stepIsValidAttrChange = function stepIsValidAttrChange(step, beforeDoc, afterDoc) { try { if (step instanceof _transform.AttrStep || step instanceof _steps.SetAttrsStep) { var attrStepAfter = afterDoc.nodeAt(step.pos); var attrStepBefore = beforeDoc.nodeAt(step.pos); // The change affected the document if (attrStepAfter && attrStepBefore && !attrStepAfter.eq(attrStepBefore)) { return true; } } return false; } catch (_unused) { return false; } };