diff options
author | Aarni Koskela <akx@iki.fi> | 2023-05-21 20:16:14 +0000 |
---|---|---|
committer | Aarni Koskela <akx@iki.fi> | 2023-05-21 20:25:06 +0000 |
commit | 5ed970b94972004961ecada3bc1c936ef6017f3c (patch) | |
tree | 3155dfbf4148eaac48a5aff62dbcb23077c88ec8 /javascript/token-counters.js | |
parent | 8faac8b96313c6c4bf0a81bddecff4d6ba22ac25 (diff) | |
download | stable-diffusion-webui-gfx803-5ed970b94972004961ecada3bc1c936ef6017f3c.tar.gz stable-diffusion-webui-gfx803-5ed970b94972004961ecada3bc1c936ef6017f3c.tar.bz2 stable-diffusion-webui-gfx803-5ed970b94972004961ecada3bc1c936ef6017f3c.zip |
Move token counters to separate JS file, fix names
Diffstat (limited to 'javascript/token-counters.js')
-rw-r--r-- | javascript/token-counters.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/javascript/token-counters.js b/javascript/token-counters.js new file mode 100644 index 00000000..0b74658c --- /dev/null +++ b/javascript/token-counters.js @@ -0,0 +1,75 @@ +let promptTokenCountDebounceTime = 800; +let promptTokenCountTimeouts = {}; +var promptTokenCountUpdateFunctions = {}; + +function update_txt2img_tokens(...args) { + // Called from Gradio + update_token_counter("txt2img_token_button"); + if (args.length == 2) { + return args[0]; + } + return args; +} + +function update_img2img_tokens(...args) { + // Called from Gradio + update_token_counter("img2img_token_button"); + if (args.length == 2) { + return args[0]; + } + return args; +} + +function update_token_counter(button_id) { + if (promptTokenCountTimeouts[button_id]) { + clearTimeout(promptTokenCountTimeouts[button_id]); + } + promptTokenCountTimeouts[button_id] = setTimeout( + () => gradioApp().getElementById(button_id)?.click(), + promptTokenCountDebounceTime, + ); +} + + +function recalculatePromptTokens(name) { + promptTokenCountUpdateFunctions[name]?.(); +} + +function recalculate_prompts_txt2img() { + // Called from Gradio + recalculatePromptTokens('txt2img_prompt'); + recalculatePromptTokens('txt2img_neg_prompt'); + return Array.from(arguments); +} + +function recalculate_prompts_img2img() { + // Called from Gradio + recalculatePromptTokens('img2img_prompt'); + recalculatePromptTokens('img2img_neg_prompt'); + return Array.from(arguments); +} + +function setupTokenCounting(id, id_counter, id_button) { + var prompt = gradioApp().getElementById(id); + var counter = gradioApp().getElementById(id_counter); + var textarea = gradioApp().querySelector(`#${id} > label > textarea`); + + if (counter.parentElement == prompt.parentElement) { + return; + } + + prompt.parentElement.insertBefore(counter, prompt); + prompt.parentElement.style.position = "relative"; + + promptTokenCountUpdateFunctions[id] = function() { + update_token_counter(id_button); + }; + textarea.addEventListener("input", promptTokenCountUpdateFunctions[id]); +} + +function setupTokenCounters() { + setupTokenCounting('txt2img_prompt', 'txt2img_token_counter', 'txt2img_token_button'); + setupTokenCounting('txt2img_neg_prompt', 'txt2img_negative_token_counter', 'txt2img_negative_token_button'); + setupTokenCounting('img2img_prompt', 'img2img_token_counter', 'img2img_token_button'); + setupTokenCounting('img2img_neg_prompt', 'img2img_negative_token_counter', 'img2img_negative_token_button'); +} |