marshall-y-slate
Version:
Yjs bindings for Slate.
96 lines • 8.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.withUndoManager = void 0;
const Y = __importStar(require("yjs"));
const yjs_editor_1 = require("./yjs-editor");
const utils_1 = require("../cursor/utils");
const slate_1 = require("slate");
function withUndoManager(editor, options = {
trackedOrigins: [],
captureTimeout: 300,
deleteFilter: () => true
}) {
const e = editor;
const { onChange } = e;
let previousSelection;
const undoManager = new Y.UndoManager(e.sharedType, Object.assign(Object.assign({}, options), { trackedOrigins: new Set([editor].concat(options.trackedOrigins)) }));
e.onChange = () => {
onChange();
if (!yjs_editor_1.YjsEditor.isRemote(e)) {
try {
const lastOperation = e.operations[e.operations.length - 1];
if (lastOperation && lastOperation.type === 'set_selection' && lastOperation.newProperties) {
const { anchor, focus } = lastOperation.newProperties;
const anchorRelative = anchor && (0, utils_1.absolutePositionToRelativePosition)(e.sharedType, anchor);
const focusRelative = focus && (0, utils_1.absolutePositionToRelativePosition)(e.sharedType, focus);
if (anchorRelative && focusRelative) {
previousSelection = {
anchorRelative,
focusRelative
};
}
}
}
catch (error) {
const e = editor;
if (e.onError) {
e.onError({ code: 10004, name: 'get previous relative', nativeError: error });
}
}
}
};
undoManager.on('stack-item-added', (event) => {
if (event.changedParentTypes.has(e.sharedType) && previousSelection) {
event.stackItem.meta.set(e, previousSelection);
previousSelection = null;
}
});
undoManager.on('stack-item-popped', (event) => {
const selection = event.stackItem.meta.get(e);
if (selection) {
const anchor = (0, utils_1.relativePositionToAbsolutePosition)(e.sharedType, selection.anchorRelative);
const focus = (0, utils_1.relativePositionToAbsolutePosition)(e.sharedType, selection.focusRelative);
if ((anchor === null || anchor === void 0 ? void 0 : anchor.path) && (focus === null || focus === void 0 ? void 0 : focus.path) && slate_1.Editor.hasPath(e, anchor.path) && slate_1.Editor.hasPath(e, focus.path)) {
slate_1.Transforms.setSelection(e, {
anchor: anchor,
focus: focus
});
}
}
});
e.undoManager = undoManager;
e.undo = () => {
yjs_editor_1.YjsEditor.asUndo(e, () => {
e.undoManager.undo();
});
Promise.resolve().then(() => slate_1.Editor.normalize(editor));
};
e.redo = () => {
yjs_editor_1.YjsEditor.asUndo(e, () => {
e.undoManager.redo();
});
Promise.resolve().then(() => slate_1.Editor.normalize(editor));
};
return e;
}
exports.withUndoManager = withUndoManager;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kby1tYW5hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2luL3VuZG8tbWFuYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx1Q0FBeUI7QUFDekIsNkNBQXlDO0FBQ3pDLDJDQUF5RztBQUN6RyxpQ0FBd0U7QUFReEUsU0FBZ0IsZUFBZSxDQUM3QixNQUFTLEVBQ1QsT0FBTyxHQUFHO0lBQ1IsY0FBYyxFQUFFLEVBQUU7SUFDbEIsY0FBYyxFQUFFLEdBQUc7SUFDbkIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7Q0FDekI7SUFFRCxNQUFNLENBQUMsR0FBRyxNQUEyQixDQUFDO0lBQ3RDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxpQkFBbUcsQ0FBQztJQUN4RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsa0NBQzdDLE9BQU8sS0FDVixjQUFjLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQ2hFLENBQUM7SUFFSCxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRTtRQUNoQixRQUFRLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxzQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJO2dCQUNGLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLGFBQWEsQ0FBQyxhQUFhLEVBQUU7b0JBQzFGLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLGFBQW9CLENBQUM7b0JBQzdELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxJQUFBLDBDQUFrQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFGLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxJQUFBLDBDQUFrQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3ZGLElBQUksY0FBYyxJQUFJLGFBQWEsRUFBRTt3QkFDbkMsaUJBQWlCLEdBQUc7NEJBQ2xCLGNBQWM7NEJBQ2QsYUFBYTt5QkFDZCxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxNQUFNLENBQUMsR0FPSCxNQUFhLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDYixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQy9FO2FBQ0Y7U0FDRjtJQUNILENBQUMsQ0FBQztJQUNGLFdBQVcsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUNoRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLGlCQUFpQixFQUFFO1lBQ25FLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMvQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUNqRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLE1BQU0sR0FBRyxJQUFBLDBDQUFrQyxFQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sS0FBSyxHQUFHLElBQUEsMENBQWtDLEVBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLE1BQUksS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksQ0FBQSxJQUFJLGNBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFZLENBQUMsSUFBSSxjQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBWSxDQUFDLEVBQUU7Z0JBQ2xILGtCQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtvQkFDekIsTUFBTSxFQUFFLE1BQW1CO29CQUMzQixLQUFLLEVBQUUsS0FBa0I7aUJBQzFCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBRTVCLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1osc0JBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUN2QixDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDO0lBQ0YsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDWixzQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFFRixPQUFPLENBQUMsQ0FBQztBQUVYLENBQUM7QUFwRkQsMENBb0ZDIn0=