UNPKG

gd-canvas

Version:

This set of libraries was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.0 and no dependencies accept gd-tree (it has jquery and jstree) and gd-graph (it has jquery and chart.js).

119 lines 14.9 kB
export class Action { constructor(name, obj) { this.name = name; this.obj = obj; this.Name = name; this.Obj = obj; this.init_x = obj.X; this.init_y = obj.Y; this.init_w = obj.W; this.init_h = obj.H; this.init_angle = obj.Angle; } record(x, y, w, h, a) { switch (this.Name) { case 'move': this.x = x - this.init_x; this.y = y - this.init_y; break; case 'resize': this.w = w - this.init_w; this.h = h - this.init_h; break; case 'rotate': this.a = a - this.init_angle; break; } } undo() { switch (this.Name) { case 'move': this.Obj.MoveOffset(-this.x, -this.y); break; case 'resize': this.Obj.Resize1(-this.w, -this.h); break; case 'rotate': this.Obj.Rotate1(-this.a); break; } } redo() { switch (this.Name) { case 'move': this.Obj.MoveOffset(this.x, this.y); break; case 'resize': this.Obj.Resize1(this.w, this.h); break; case 'rotate': this.Obj.Rotate1(this.a); break; } } } export class Transaction { constructor() { this.isRecording = false; this.actions = new Array(); } addAction(name, obj) { const action = new Action(name, obj); this.actions.push(action); return action; } recordAction(x, y, w, h, a) { for (let i = 0; i < this.actions.length; ++i) { this.actions[i].record(x, y, w, h, a); } } undo() { for (let i = 0; i < this.actions.length; ++i) { this.actions[i].undo(); } } redo() { for (let i = 0; i < this.actions.length; ++i) { this.actions[i].redo(); } } } export class UndoRedoManager { constructor() { this.transactions = new Array(); this.current = -1; } TransactionStart() { const transaction = new Transaction(); this.transactions.push(transaction); this.current = this.transactions.length - 1; return transaction; } TransactionEnd() { this.transactions[this.current].isRecording = false; } IsUndoEmpty() { return this.current === -1; } IsRedoEmpty() { return this.current === this.transactions.length - 1; } CreateAction(name, obj) { this.transactions[this.current].addAction(name, obj); } RecordAction(x, y, w, h, a) { this.transactions[this.current].isRecording = true; this.transactions[this.current].recordAction(x, y, w, h, a); } undo() { if (this.current >= 0) { this.transactions[this.current--].undo(); } } redo() { if (this.current < this.transactions.length - 1) { this.transactions[++this.current].redo(); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2QtY2FudmFzLnVuZG9SZWRvLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZ2QtY2FudmFzLyIsInNvdXJjZXMiOlsibGliL2dkLWNhbnZhcy51bmRvUmVkby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLE9BQU8sTUFBTTtJQWdCZixZQUFxQixJQUFhLEVBQVUsR0FBUztRQUFoQyxTQUFJLEdBQUosSUFBSSxDQUFTO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBTTtRQUVqRCxJQUFJLENBQUMsSUFBSSxHQUFTLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFVLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLENBQUUsQ0FBVSxFQUFFLENBQVUsRUFBRSxDQUFVLEVBQUUsQ0FBVSxFQUFFLENBQVU7UUFFOUQsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUNqQjtZQUNJLEtBQUssTUFBTTtnQkFDUCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUM3QixNQUFNO1lBQ04sS0FBSyxRQUFRO2dCQUNULElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxN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QztJQUVNLElBQUk7UUFFUCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNyQjtZQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRU0sSUFBSTtRQUVQLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQy9DO1lBQ0ksSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBJVHJhbnNhY3Rpb25cclxue1xyXG4gICAgYWRkQWN0aW9uKCBuYW1lIDogc3RyaW5nLCBvYmogOiBhbnkgKSA6IElBY3Rpb247XHJcbn1cclxuaW50ZXJmYWNlIElBY3Rpb25cclxue1xyXG4gICAgcmVjb3JkKCB4IDogbnVtYmVyLCB5IDogbnVtYmVyLCB3IDogbnVtYmVyLCBoIDogbnVtYmVyLCBhIDogbnVtYmVyICk6IHZvaWQ7XHJcbiAgICB1bmRvKCkgIDogdm9pZDtcclxuICAgIHJlZG8oKSAgOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvblxyXG57XHJcbiAgICBwcml2YXRlIGluaXRfeCAgICAgIDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBpbml0X3kgICAgICA6IG51bWJlcjtcclxuICAgIHByaXZhdGUgaW5pdF93ICAgICAgOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGluaXRfaCAgICAgIDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBpbml0X2FuZ2xlICA6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIHggICAgICAgICAgIDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB5ICAgICAgICAgICA6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdyAgICAgICAgICAgOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGggICAgICAgICAgIDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhICAgICAgICAgICA6IG51bWJlcjtcclxuICAgIHByaXZhdGUgT2JqICAgICAgICAgOiBhbnk7XHJcbiAgICBwcml2YXRlIE5hbWUgICAgICAgIDogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCBwcml2YXRlIG5hbWUgOiBzdHJpbmcsIHByaXZhdGUgb2JqIDogYW55IClcclxuICAgIHtcclxuICAgICAgICB0aGlzLk5hbWUgICAgICAgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuT2JqICAgICAgICA9IG9iajtcclxuICAgICAgICB0aGlzLmluaXRfeCAgICAgPSBvYmouWDtcclxuICAgICAgICB0aGlzLmluaXRfeSAgICAgPSBvYmouWTtcclxuICAgICAgICB0aGlzLmluaXRfdyAgICAgPSBvYmouVztcclxuICAgICAgICB0aGlzLmluaXRfaCAgICAgPSBvYmouSDtcclxuICAgICAgICB0aGlzLmluaXRfYW5nbGUgPSBvYmouQW5nbGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjb3JkKCB4IDogbnVtYmVyLCB5IDogbnVtYmVyLCB3IDogbnVtYmVyLCBoIDogbnVtYmVyLCBhIDogbnVtYmVyIClcclxuICAgIHtcclxuICAgICAgICBzd2l0Y2goIHRoaXMuTmFtZSApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjYXNlICdtb3ZlJyA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnggPSB4IC0gdGhpcy5pbml0X3g7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgPSB5IC0gdGhpcy5pbml0X3k7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyZXNpemUnIDpcclxuICAgICAgICAgICAgICAgIHRoaXMudyA9IHcgLSB0aGlzLmluaXRfdztcclxuICAgICAgICAgICAgICAgIHRoaXMuaCA9IGggLSB0aGlzLmluaXRfaDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JvdGF0ZScgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hID0gYSAtIHRoaXMuaW5pdF9hbmdsZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuZG8oKVxyXG4gICAge1xyXG4gICAgICAgIHN3aXRjaCggdGhpcy5OYW1lIClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vdmUnICAgOiB0aGlzLk9iai5Nb3ZlT2Zmc2V0KCAtdGhpcy54LCAtdGhpcy55ICk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyZXNpemUnIDogdGhpcy5PYmouUmVzaXplMSAgICggLXRoaXMudywgLXRoaXMuaCApOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncm90YXRlJyA6IHRoaXMuT2JqLlJvdGF0ZTEgICAoIC10aGlzLmEgICAgICAgICAgKTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZG8oKVxyXG4gICAge1xyXG4gICAgICAgIHN3aXRjaCggdGhpcy5OYW1lIClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vdmUnICAgOiB0aGlzLk9iai5Nb3ZlT2Zmc2V0KCB0aGlzLngsIHRoaXMueSApOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncmVzaXplJyA6IHRoaXMuT2JqLlJlc2l6ZTEgICAoIHRoaXMudywgdGhpcy5oICk7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyb3RhdGUnIDogdGhpcy5PYmouUm90YXRlMSAgICggdGhpcy5hICAgICAgICAgKTsgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBJVHJhbnNhY3Rpb25cclxue1xyXG4gICAgcHVibGljICBpc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBhY3Rpb25zICAgICA9IG5ldyBBcnJheSgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBwdWJsaWMgYWRkQWN0aW9uKCBuYW1lIDogc3RyaW5nLCBvYmogOiBhbnkgKSA6IElBY3Rpb25cclxuICAgIHtcclxuICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgQWN0aW9uKCBuYW1lLCBvYmogKTtcclxuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCggYWN0aW9uICk7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVjb3JkQWN0aW9uKCB4IDogbnVtYmVyLCB5IDogbnVtYmVyLCB3IDogbnVtYmVyLCBoIDogbnVtYmVyLCBhIDogbnVtYmVyIClcclxuICAgIHtcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7ICsraSApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbaV0ucmVjb3JkKCB4LCB5LCB3LCBoLCBhICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bmRvKClcclxuICAgIHtcclxuICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8IHRoaXMuYWN0aW9ucy5sZW5ndGg7ICsraSApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbaV0udW5kbygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVkbygpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCB0aGlzLmFjdGlvbnMubGVuZ3RoOyArK2kgKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW2ldLnJlZG8oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmRvUmVkb01hbmFnZXJcclxue1xyXG4gICAgcHVibGljIHRyYW5zYWN0aW9ucyA9IG5ldyBBcnJheSgpO1xyXG4gICAgcHVibGljIGN1cnJlbnQgPSAtMTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gICAgVHJhbnNhY3Rpb25TdGFydCgpIDogSVRyYW5zYWN0aW9uXHJcbiAgICB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gID0gbmV3IFRyYW5zYWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCggdHJhbnNhY3Rpb24gKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgVHJhbnNhY3Rpb25FbmQoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW3RoaXMuY3VycmVudF0uaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgSXNVbmRvRW1wdHkoKSA6IGJvb2xlYW5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50ID09PSAtMTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBJc1JlZG9FbXB0eSgpIDogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IHRoaXMudHJhbnNhY3Rpb25zLmxlbmd0aC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBDcmVhdGVBY3Rpb24oIG5hbWUgOiBzdHJpbmcsICBvYmogOiBhbnkgKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW3RoaXMuY3VycmVudF0uYWRkQWN0aW9uKCBuYW1lLCBvYmogKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgUmVjb3JkQWN0aW9uKCB4IDogbnVtYmVyLCAgeSA6IG51bWJlciwgdyA6IG51bWJlciwgaCA6IG51bWJlciwgYSA6IG51bWJlciApXHJcbiAgICB7XHJcbiAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW3RoaXMuY3VycmVudF0uaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1t0aGlzLmN1cnJlbnRdLnJlY29yZEFjdGlvbiggeCwgeSwgdywgaCwgYSApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bmRvKClcclxuICAgIHtcclxuICAgICAgICBpZiggdGhpcy5jdXJyZW50ID49IDAgKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbdGhpcy5jdXJyZW50LS1dLnVuZG8oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZG8oKVxyXG4gICAge1xyXG4gICAgICAgIGlmKCB0aGlzLmN1cnJlbnQgPCB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGggLSAxIClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zWysrdGhpcy5jdXJyZW50XS5yZWRvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==