Created
April 3, 2025 14:25
-
-
Save derekmc/523fa0e3fc7effc73cbf3ed1961977e9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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