Key Repeat JS

Custom key repeat engine with configurable initial delay, repeat interval, and throttle floor.

generate_key_repeat_js


def generate_key_repeat_js(
    config:TokenSelectorConfig, # config with timing settings
)->str: # JS code fragment for the IIFE

Generate the custom key repeat engine JS.

from cjm_fasthtml_token_selector.core.config import TokenSelectorConfig, _reset_prefix_counter

_reset_prefix_counter()

# Default timing
cfg = TokenSelectorConfig(prefix="t")
js = generate_key_repeat_js(cfg)
assert "ns._handleKeyDown" in js
assert "ns._handleKeyUp" in js
assert "ns._repeatTimer" in js
assert str(cfg.initial_delay) in js
assert str(cfg.repeat_interval) in js
assert str(cfg.throttle_floor) in js
assert "ArrowLeft" in js
assert "ArrowRight" in js
print("Default key repeat JS generated!")

# Custom keys
cfg_wasd = TokenSelectorConfig(prefix="tw", left_key="a", right_key="d")
js_wasd = generate_key_repeat_js(cfg_wasd)
assert "'a'" in js_wasd
assert "'d'" in js_wasd
print("WASD key repeat JS generated!")

# Span mode includes shift dispatch
cfg_span = TokenSelectorConfig(prefix="ts", selection_mode="span")
js_span = generate_key_repeat_js(cfg_span)
assert "ns.extendLeft" in js_span
assert "ns.extendRight" in js_span
print("Span mode key repeat JS generated!")

# Custom timing
cfg_fast = TokenSelectorConfig(prefix="tf", initial_delay=100, repeat_interval=30, throttle_floor=20)
js_fast = generate_key_repeat_js(cfg_fast)
assert "100" in js_fast
assert "30" in js_fast
assert "20" in js_fast
print("Custom timing key repeat JS generated!")

_reset_prefix_counter()
print("All key repeat JS tests passed!")
Default key repeat JS generated!
WASD key repeat JS generated!
Span mode key repeat JS generated!
Custom timing key repeat JS generated!
All key repeat JS tests passed!