UNPKG

imask

Version:

vanilla javascript input mask

37 lines (35 loc) 932 B
class InputHistory { constructor() { this.states = []; this.currentIndex = 0; } get currentState() { return this.states[this.currentIndex]; } get isEmpty() { return this.states.length === 0; } push(state) { // if current index points before the last element then remove the future if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1; this.states.push(state); if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift(); this.currentIndex = this.states.length - 1; } go(steps) { this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1); return this.currentState; } undo() { return this.go(-1); } redo() { return this.go(+1); } clear() { this.states.length = 0; this.currentIndex = 0; } } InputHistory.MAX_LENGTH = 100; export { InputHistory as default };