Spaces:
Running
Running
File size: 943 Bytes
d7508be |
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 |
class History {
constructor(maxStates = 50) {
this.states = [];
this.currentIndex = -1;
this.maxStates = maxStates;
}
push(state) {
// Remove any states after current index
this.states = this.states.slice(0, this.currentIndex + 1);
// Add new state
this.states.push(state);
// Remove oldest state if exceeding maxStates
if (this.states.length > this.maxStates) {
this.states.shift();
}
this.currentIndex = this.states.length - 1;
}
undo() {
if (this.currentIndex > 0) {
this.currentIndex--;
return this.states[this.currentIndex];
}
return null;
}
redo() {
if (this.currentIndex < this.states.length - 1) {
this.currentIndex++;
return this.states[this.currentIndex];
}
return null;
}
canUndo() {
return this.currentIndex > 0;
}
canRedo() {
return this.currentIndex < this.states.length - 1;
}
} |