Skip to content

Commit 6e16a97

Browse files
committed
Added slice-like method (drop) to HistoryStack
1 parent 4ad9ebe commit 6e16a97

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

js/main.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -314,30 +314,36 @@ function paletteSelect(event) {
314314
- UNDO/REDO -
315315
//////////////////////////////////////////////////////////////////////////////*/
316316
class HistoryStack {
317-
constructor() {
318-
this.stack = [];
317+
constructor(stack = []) {
318+
this.stack = stack; //[{[cells], char}, ...]
319319
}
320-
push(item) {
321-
this.stack.push(item);
322-
document.dispatchEvent(new CustomEvent('historyupdate'));
320+
push(record) {
321+
this.stack.push(record);
322+
document.dispatchEvent(HistoryStack.updateEvent());
323323
}
324324
pop() {
325325
let record = this.stack.pop()
326-
document.dispatchEvent(new CustomEvent('historyupdate'));
326+
document.dispatchEvent(HistoryStack.updateEvent());
327327
return record;
328328
}
329329
clear() {
330330
this.stack = [];
331-
document.dispatchEvent(new CustomEvent('historyupdate'));
331+
document.dispatchEvent(HistoryStack.updateEvent());
332+
}
333+
drop(last) {
334+
this.stack = this.stack.slice(0, last);
335+
document.dispatchEvent(HistoryStack.updateEvent());
332336
}
333337
get length() { return this.stack.length; }
338+
339+
static updateEvent() { return new CustomEvent('historyupdate'); }
334340
}
335341

336-
let past = new HistoryStack, future = new HistoryStack; //[{[cells], char}, ...]
342+
let past = new HistoryStack, future = new HistoryStack;
337343

338344
function updateHistory(cells, char) {
339345
future.clear();
340-
if (past.length > 1000) past = past.slice(0, 500);
346+
if (past.length > 1000) past.drop(500);
341347
past.push({cells, char});
342348
}
343349

0 commit comments

Comments
 (0)