@launchmenu/core
Version:
An environment for visual keyboard controlled applets
92 lines • 6.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.standardTextResource = exports.TextEditCommand = void 0;
const Command_1 = require("../../../undoRedo/Command");
const Resource_1 = require("../../../undoRedo/dependencies/Resource");
/** A base command that can be used to edit textfields */
class TextEditCommand 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 = [exports.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 alteration = change.text
? {
...change.text,
prevContent: oldText.substring(change.text.start, change.text.end),
}
: undefined;
this.addedText = (alteration === null || alteration === void 0 ? void 0 : alteration.content) || undefined;
const newText = change.text
? oldText.substring(0, change.text.start) +
change.text.content +
oldText.substring(change.text.end)
: oldText;
const newSelection = (_a = change.selection) !== null && _a !== void 0 ? _a : oldSelection;
return {
oldText,
oldSelection,
newText,
newSelection,
alteration,
};
}
/** @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 ((_a = this.data) === null || _a === void 0 ? void 0 : _a.alteration) ? [(_b = this.data) === null || _b === void 0 ? void 0 : _b.alteration] : [];
}
}
exports.TextEditCommand = TextEditCommand;
/** A standard resource for text editing */
exports.standardTextResource = new Resource_1.Resource("Text edit");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEVkaXRDb21tYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RleHRGaWVsZHMvaW50ZXJhY3Rpb24vY29tbWFuZHMvVGV4dEVkaXRDb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUFrRDtBQUNsRCxzRUFBaUU7QUFPakUsMERBQTBEO0FBQzFELE1BQWEsZUFBZ0IsU0FBUSxpQkFBTztJQWN4Qzs7Ozs7T0FLRztJQUNILFlBQ0ksTUFBa0IsRUFDbEIsTUFBaUMsRUFDakMsT0FBMEQsRUFBRTs7UUFFNUQsS0FBSyxFQUFFLENBQUM7UUF4QkwsYUFBUSxHQUFHO1lBQ2QsSUFBSSxFQUFFLFdBQVc7U0FDcEIsQ0FBQztRQUNpQixpQkFBWSxHQUFHLENBQUMsNEJBQW9CLENBQWUsQ0FBQztRQXNCbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxVQUFVLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLFNBQUcsSUFBSSxDQUFDLGlCQUFpQixtQ0FBSSxLQUFLLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ08sYUFBYTs7UUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWhELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxP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