Core JS

Master IIFE composer for the token selector JS runtime.

Global Callback Names


global_callback_name


def global_callback_name(
    prefix:str, # token selector instance prefix
    callback:str, # base callback name
)->str: # global function name

Generate a prefix-unique global callback name.

assert global_callback_name("ts0", "activate") == "ts0_activate"
assert global_callback_name("my-split", "deactivate") == "my-split_deactivate"
print("global_callback_name tests passed!")
global_callback_name tests passed!

IIFE Sub-Generators

Master Composer


generate_token_selector_js


def generate_token_selector_js(
    config:TokenSelectorConfig, # config for this instance
    ids:TokenSelectorHtmlIds, # HTML IDs
    state:TokenSelectorState=None, # initial state
    extra_scripts:Tuple=(), # additional JS to include in the IIFE
)->Any: # Script element with the complete IIFE

Compose all token selector JS into a single namespaced IIFE.

from cjm_fasthtml_token_selector.core.config import TokenSelectorConfig, _reset_prefix_counter
from cjm_fasthtml_token_selector.core.models import TokenSelectorState
from cjm_fasthtml_token_selector.core.html_ids import TokenSelectorHtmlIds

_reset_prefix_counter()

cfg = TokenSelectorConfig(prefix="ts0")
ids = TokenSelectorHtmlIds(prefix="ts0")
state = TokenSelectorState(anchor=3, focus=3, word_count=10)

script = generate_token_selector_js(cfg, ids, state)
assert script is not None

# Verify IIFE structure via string representation
js_str = str(script)
assert "window.tokenSelectors" in js_str
assert "ts0" in js_str
assert "ns.activate" in js_str
assert "ns.deactivate" in js_str
assert "ns.moveLeft" in js_str
assert "ns._handleKeyDown" in js_str
assert "ts0_activate" in js_str
# Settle handler uses replace pattern (removeEventListener + addEventListener)
assert "_tsSettleHandler_ts0" in js_str
assert "removeEventListener" in js_str
print("IIFE structure verified!")

# With extra scripts
script2 = generate_token_selector_js(cfg, ids, state, extra_scripts=("ns.customFn = function() {};",))
assert "ns.customFn" in str(script2)
print("Extra scripts injection verified!")

# Multi-instance: different prefixes don't collide
cfg2 = TokenSelectorConfig(prefix="ts1")
ids2 = TokenSelectorHtmlIds(prefix="ts1")
script3 = generate_token_selector_js(cfg2, ids2)
js_str3 = str(script3)
assert "ts1" in js_str3
assert "ts0" not in js_str3
print("Multi-instance isolation verified!")

# Default state when none provided
script4 = generate_token_selector_js(cfg, ids)
assert script4 is not None
print("Default state fallback verified!")

_reset_prefix_counter()
print("All JS core tests passed!")
IIFE structure verified!
Extra scripts injection verified!
Multi-instance isolation verified!
Default state fallback verified!
All JS core tests passed!