@launchmenu/core
Version:
An environment for visual keyboard controlled applets
86 lines • 6.76 kB
JavaScript
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWR2YW5jZWRUZXh0RWRpdENvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGV4dEZpZWxkcy9pbnRlcmFjdGlvbi9hZHZhbmNlZC9BZHZhbmNlZFRleHRFZGl0Q29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBa0Q7QUFJbEQsaUVBQWlFO0FBTWpFLDZGQUE2RjtBQUM3RixNQUFhLHVCQUF3QixTQUFRLGlCQUFPO0lBY2hEOzs7OztPQUtHO0lBQ0gsWUFDSSxNQUFrQixFQUNsQixNQUF5QyxFQUN6QyxPQUEwRCxFQUFFOztRQUU1RCxLQUFLLEVBQUUsQ0FBQztRQXhCTCxhQUFRLEdBQUc7WUFDZCxJQUFJLEVBQUUsV0FBVztTQUNwQixDQUFDO1FBQ2lCLGlCQUFZLEdBQUcsQ0FBQyxzQ0FBb0IsQ0FBZSxDQUFDO1FBc0JuRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLFVBQVUsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVE7WUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsU0FBRyxJQUFJLENBQUMsaUJBQWlCLG1DQUFJLEtBQUssQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxhQUFhOztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxNQUFNLFdBQVcsR0FBc0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUQsR0FBRyxNQUFNO1lBQ1QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQ25DLENBQUMsT0FBTyxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFFLENBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUMxRCxPQUFPLENBQ1YsQ0FBQztRQUNGLE1BQU0sWUFBWSxTQUFHLE1BQU0sQ0FBQyxTQUFTLG1DQUFJLFlBQVksQ0FBQztRQUV0RCxPQUFPO1lBQ0gsT0FBTztZQUNQLFlBQVk7WUFDWixPQUFPO1lBQ1AsWUFBWTtZQUNaLFdBQVc7U0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQjtJQUNOLFNBQVM7UUFDZixpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNwQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGdCQUFnQjtJQUNOLFFBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0lBRUQsVUFBVTtJQUNWLGdCQUFnQjtJQUNULFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtJQUNULGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtJQUNULGNBQWM7O1FBQ2pCLG1CQUFPLElBQUksQ0FBQyxJQUFJLDBDQUFFLFdBQVcsbUNBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQXpHRCwwREF5R0MifQ==