Skip to content

Instantly share code, notes, and snippets.

@derekmc
Created April 3, 2025 14:25
Show Gist options
  • Save derekmc/523fa0e3fc7effc73cbf3ed1961977e9 to your computer and use it in GitHub Desktop.
Save derekmc/523fa0e3fc7effc73cbf3ed1961977e9 to your computer and use it in GitHub Desktop.
// lifecycle globals
let data = {}, temp = {},
data0 = {}, temp0 = {},
ref = {}, items = {}, env = {}
data0.buttonCount = 10
data0.buttonCodes = fill(10, null)
env.DataVersion = "000"
env.DataKey = "BichordApp"
env.ResetTime = 60*1000
env.SaveTime = 5*1000
env.Layout = trimlines`
: r n o e a t i l space shift
r: X right s u up * c h esc _
n: left X m d pgup = p x + -
o: s m X / w g : $ { }
e: u d \\ X f k [ ] alt select
a: down pgdn w f X q j v ~ !
t: < > g k z X b y ( )
i: c p ^ # j b X \` ' "
l: h x & | v y % 0 @
space: ; ctrl , . tab back5 back enter X ?
shift: 1 2 3 4 5 6 7 8 9 X
`
function migrate(){
// migrate data versions
}
function save(){
let key = env.DataKey + env.DataVersion
let itemkey = "__items"
data[itemkey] = {}
for(let name in items){
data[itemkey][name] = items[name].write()
}
LocalStorage.setItem(key, write(data))
delete data[itemkey]
}
function load(){
let key = env.DataKey + env.DataVersion
let itemkey = "__items"
let __data = read(LocalStorage.getItem(key))
if(__data.hasOwnProperty(itemkey)){
for(let name in items){
items[name].read(__data[itemkey][name])
}
}
delete __data[itemkey]
data = __data
}
function init(){
data = deepCopy(data0)
}
function reset(){
temp = deepCopy(temp0)
}
function delay(f,t,...args){
let name = "delay:" + f
if(ref.hasOwnProperty(name)){
clearTimeout(ref[name])}
ref[name] = setTimeout(fulfill, t)
function fulfill(){
delete ref[name]
f(args...)
}
}
function rekey(){
data.buttonCodes = fill(
data.buttonCount, null)
}
function keydown(e){
let code = keyCode(e)
let i = data.buttonCodes.indexOf(code)
let j = data.buttonCodes.indexOf(null)
if(j > -1){
if(i == -1)
data.buttonCodes[j] = j
return
}
}
function keyup(e){
let code = keyCode(e)
let i = data.buttonCodes.indexOf(code)
let j = data.buttonCodes.indexOf(null)
if(j > -1) return
}
function keyCode(e){
return e.keyCode
}
function deepCopy(x){
return read(write(x))
}
function read(x){
JSON.parse(x)
}
function write(x){
JSON.stringify(x)
}
function fill(n, item){
let a = []
for(let i=0; i<n; ++i){
a[i] = item
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment