46 lines
949 B
JavaScript
46 lines
949 B
JavaScript
'use strict'
|
|
|
|
function History () {
|
|
this.index = 0
|
|
this.a = []
|
|
|
|
this.clear = function () {
|
|
this.a = []
|
|
this.index = 0
|
|
}
|
|
|
|
this.push = function (data) {
|
|
if (this.index < this.a.length - 1) {
|
|
this.fork()
|
|
}
|
|
this.index = this.a.length
|
|
this.a = this.a.slice(0, this.index)
|
|
this.a.push(copy(data))
|
|
|
|
if (this.a.length > 20) {
|
|
this.a.shift()
|
|
}
|
|
}
|
|
|
|
this.fork = function () {
|
|
this.a = this.a.slice(0, this.index + 1)
|
|
}
|
|
|
|
this.pop = function () {
|
|
return this.a.pop()
|
|
}
|
|
|
|
this.prev = function () {
|
|
this.index = clamp(this.index - 1, 0, this.a.length - 1)
|
|
return copy(this.a[this.index])
|
|
}
|
|
|
|
this.next = function () {
|
|
this.index = clamp(this.index + 1, 0, this.a.length - 1)
|
|
return copy(this.a[this.index])
|
|
}
|
|
|
|
function copy (data) { return data ? JSON.parse(JSON.stringify(data)) : [] }
|
|
function clamp (v, min, max) { return v < min ? min : v > max ? max : v }
|
|
}
|