| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 |
1×
4×
4×
4×
4×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
7×
1×
1×
1×
7×
7×
5×
2×
2×
7×
7×
7×
7×
1×
4×
4×
4×
4×
4×
1×
3×
1×
2×
1×
3×
1×
2×
1×
1×
1×
1×
1×
1×
| "use strict";
/* istanbul ignore next */
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
Iif (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) Eif (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var mobx_1 = require("mobx");
var json_1 = require("./json");
var Undo = (function () {
function Undo(state, transactionCompleted) {
var _this = this;
this.state = state;
this.transactionCompleted = transactionCompleted;
this.undoStack = [];
this.redoStack = [];
this.enabled = false;
this.quit = mobx_1.autorun(function () { return _this.observe(); });
}
Undo.prototype.dispose = function () {
this.quit();
};
Undo.prototype.observe = function () {
var newState = json_1.json.save(this.state);
if (!this.enabled) {
this.enabled = true;
}
else {
this.redoStack.length = 0;
this.undoStack.push(this.currentState);
}
var previousState = this.currentState;
this.currentState = newState;
Eif (this.transactionCompleted) {
this.transactionCompleted(this.currentState, previousState);
}
};
Undo.prototype.swap = function (source, target) {
var popped = source.pop();
Eif (popped) {
target.push(this.currentState);
this.enabled = false;
json_1.json.load(this.state, popped);
}
};
Object.defineProperty(Undo.prototype, "canUndo", {
get: function () {
return !!this.undoStack.length;
},
enumerable: true,
configurable: true
});
Undo.prototype.undo = function () {
this.swap(this.undoStack, this.redoStack);
};
Object.defineProperty(Undo.prototype, "canRedo", {
get: function () {
return !!this.redoStack.length;
},
enumerable: true,
configurable: true
});
Undo.prototype.redo = function () {
this.swap(this.redoStack, this.undoStack);
};
return Undo;
}());
__decorate([
mobx_1.observable.shallow
], Undo.prototype, "undoStack", void 0);
__decorate([
mobx_1.observable.shallow
], Undo.prototype, "redoStack", void 0);
__decorate([
mobx_1.action.bound
], Undo.prototype, "undo", null);
__decorate([
mobx_1.action.bound
], Undo.prototype, "redo", null);
exports.Undo = Undo;
//# sourceMappingURL=Undo.js.map |