@atlaskit/editor-plugin-local-id
Version:
LocalId plugin for @atlaskit/editor-core
71 lines (69 loc) • 3.08 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.localIdNotEmpty = exports.batchAddLocalIdToNodes = exports.addMissingLocalIdsToDocument = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _batchAttrsStep = require("@atlaskit/adf-schema/steps/batch-attrs-step");
var _collab = require("@atlaskit/editor-common/collab");
var _generateShortUUID = require("./generateShortUUID");
var localIdNotEmpty = exports.localIdNotEmpty = function localIdNotEmpty(localId) {
return typeof localId === 'string' && localId.trim().length > 0;
};
var addMissingLocalIdsToDocument = exports.addMissingLocalIdsToDocument = function addMissingLocalIdsToDocument(tr) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
onRepaired = _ref.onRepaired;
var missingLocalIdPositions = [];
var _tr$doc$type$schema$n = tr.doc.type.schema.nodes,
text = _tr$doc$type$schema$n.text,
hardBreak = _tr$doc$type$schema$n.hardBreak,
mediaGroup = _tr$doc$type$schema$n.mediaGroup;
var ignoredNodeTypes = [text === null || text === void 0 ? void 0 : text.name, hardBreak === null || hardBreak === void 0 ? void 0 : hardBreak.name, mediaGroup === null || mediaGroup === void 0 ? void 0 : mediaGroup.name];
tr.doc.descendants(function (node, pos) {
var _node$type$spec$attrs;
if (localIdNotEmpty(node.attrs.localId)) {
_generateShortUUID.generatedShortUUIDs.add(node.attrs.localId);
} else if (!ignoredNodeTypes.includes(node.type.name) && !!((_node$type$spec$attrs = node.type.spec.attrs) !== null && _node$type$spec$attrs !== void 0 && _node$type$spec$attrs.localId)) {
missingLocalIdPositions.push(pos);
}
return true;
});
var nodesToUpdate = new Map(missingLocalIdPositions.map(function (pos) {
return [pos, (0, _generateShortUUID.generateShortUUID)()];
}));
if (nodesToUpdate.size === 0) {
return false;
}
batchAddLocalIdToNodes(nodesToUpdate, tr);
(0, _collab.tintDirtyTransaction)(tr);
onRepaired === null || onRepaired === void 0 || onRepaired({
repairedNodeCount: nodesToUpdate.size
});
return true;
};
/**
* Batch adds local IDs to nodes using a BatchAttrsStep
* @param nodesToUpdate Map of position -> localId for nodes that need updates
* @param tr
*/
var batchAddLocalIdToNodes = exports.batchAddLocalIdToNodes = function batchAddLocalIdToNodes(nodesToUpdate, tr) {
var batchData = Array.from(nodesToUpdate.entries()).map(function (_ref2) {
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
pos = _ref3[0],
localId = _ref3[1];
var node = tr.doc.nodeAt(pos);
if (!node) {
throw new Error("Node does not exist at position ".concat(pos));
}
return {
position: pos,
attrs: {
localId: localId
},
nodeType: node.type.name
};
});
tr.step(new _batchAttrsStep.BatchAttrsStep(batchData));
tr.setMeta('addToHistory', false);
};