- 23 source files in src/ (build via scripts/build.sh) - Forum-sourced player knowledge in references/ - DESIGN.md with architecture and corrections - References to existing scripts (Monsterbation, jpx, HV Utils)
31 lines
1.5 KiB
JavaScript
31 lines
1.5 KiB
JavaScript
// ═══════════════════════════════════════════════════════════════════════
|
|
// UTILS — DOM shortcuts, constants, helpers
|
|
// ═══════════════════════════════════════════════════════════════════════
|
|
|
|
const $ = (s, c) => (c || document).querySelector(s);
|
|
const $$ = (s, c) => [...(c || document).querySelectorAll(s)];
|
|
const clamp = (v, l, h) => Math.max(l, Math.min(h, v));
|
|
const dummy = document.createElement('div');
|
|
|
|
const KEYS = {
|
|
A: 65, B: 66, C: 67, D: 68, E: 69, F: 70, G: 71, H: 72,
|
|
I: 73, J: 74, K: 75, L: 76, M: 77, N: 78, O: 79, P: 80,
|
|
Q: 81, R: 82, S: 83, T: 84, U: 85, V: 86, W: 87, X: 88, Y: 89, Z: 90,
|
|
D0: 48, D1: 49, D2: 50, D3: 51, D4: 52, D5: 53, D6: 54, D7: 55, D8: 56, D9: 57,
|
|
SPACE: 32, RETURN: 13, ESCAPE: 27, COMMA: 188, PERIOD: 190, UP: 38, DOWN: 40,
|
|
};
|
|
|
|
function isInputFocused() {
|
|
const el = document.activeElement;
|
|
if (!el) return false;
|
|
const t = el.tagName;
|
|
return t === 'INPUT' || t === 'TEXTAREA' || t === 'SELECT' || el.isContentEditable;
|
|
}
|
|
|
|
// ── CSS style builder shorthand ──
|
|
|
|
function css(styles) {
|
|
return Object.entries(styles)
|
|
.map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`)
|
|
.join(';');
|
|
}
|