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