UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

86 lines 6.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdvancedTextEditCommand = void 0; const Command_1 = require("../../../undoRedo/Command"); const TextEditCommand_1 = require("../commands/TextEditCommand"); /** A base command to make a more advanced text edit command composed of multiple commands */ class AdvancedTextEditCommand extends Command_1.Command { /** * Creates a new text edit command * @param target The field of which to alter the text * @param change The function to retrieve the new contents of the text field * @param type The type of the command, used for undo/redo merging */ constructor(target, change, type = {}) { var _a; super(); this.metadata = { name: "Edit text", }; this.dependencies = [TextEditCommand_1.standardTextResource]; this.target = target; if ("resource" in target && target.resource) this.dependencies = [target.resource]; this.change = change; this.addedText = type.addedText; this.selectionChange = (_a = type.isSelectionChange) !== null && _a !== void 0 ? _a : false; } /** * Uses the change function to compute the new text and selection for the field */ computeChange() { var _a; const oldText = this.target.get(); const oldSelection = this.target.getSelection(); const change = this.change({ selection: oldSelection, text: oldText }); const textChanges = change.text ? [...change.text] : []; textChanges.sort((a, b) => a.end - b.end); const alterations = textChanges.map(change => ({ ...change, prevContent: oldText.substring(change.start, change.end), })); this.addedText = alterations.map(({ content }) => content).join(""); const newText = alterations.reduceRight((newText, { start, end, content }) => newText.slice(0, start) + content + newText.slice(end), oldText); const newSelection = (_a = change.selection) !== null && _a !== void 0 ? _a : oldSelection; return { oldText, oldSelection, newText, newSelection, alterations, }; } /** @override */ onExecute() { // Compute the data for execution (and reverting) if (this.data == undefined) { this.data = this.computeChange(); } // Set the new value this.target.set(this.data.newText); this.target.setSelection(this.data.newSelection); } /** @override */ onRevert() { if (this.data) { this.target.set(this.data.oldText); this.target.setSelection(this.data.oldSelection); } } // Getters /** @override */ getAddedText() { return this.addedText; } /** @override */ isSelectionChange() { return this.selectionChange; } /** @override */ getAlterations() { var _a, _b; return (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.alterations) !== null && _b !== void 0 ? _b : []; } } exports.AdvancedTextEditCommand = AdvancedTextEditCommand; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWR2YW5jZWRUZXh0RWRpdENvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGV4dEZpZWxkcy9pbnRlcmFjdGlvbi9hZHZhbmNlZC9BZHZhbmNlZFRleHRFZGl0Q29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBa0Q7QUFJbEQsaUVBQWlFO0FBTWpFLDZGQUE2RjtBQUM3RixNQUFhLHVCQUF3QixTQUFRLGlCQUFPO0lBY2hEOzs7OztPQUtHO0lBQ0gsWUFDSSxNQUFrQixFQUNsQixNQUF5QyxFQUN6QyxPQUEwRCxFQUFFOztRQUU1RCxLQUFLLEVBQUUsQ0FBQztRQXhCTCxhQUFRLEdBQUc7WUFDZCxJQUFJLEVBQUUsV0FBVztTQUNwQixDQUFDO1FBQ2lCLGlCQUFZLEdBQUcsQ0FBQyxzQ0FBb0IsQ0FBZSxDQUFDO1FBc0JuRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLFVBQVUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVE7WUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsU0FBRyxJQUFJLENBQUMsaUJBQWlCLG1DQUFJLEtBQUssQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxhQUFhOztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFNBQVMsRUFBRSxZQUFZ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