With the AI workbench the rail had ten entries for nine number keys, so the audio gallery had none. It is now the third tab of Voices (Characters, Voice-over, Audio); 9 reopens Voices on the view used last, and a test keeps the rail within nine entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
2.3 KiB
JavaScript
38 lines
2.3 KiB
JavaScript
// Which page opening the browser shows for the selected node, and the rail's number keys
|
|
// (web/modules/shell_open_rules.js).
|
|
import assert from 'node:assert/strict';
|
|
import { pageForNode, railPageForKey } from '../web/modules/shell_open_rules.js';
|
|
|
|
const kinds = {
|
|
takesPrompt: node => Boolean(node.prompt),
|
|
hasModel: node => Boolean(node.model),
|
|
};
|
|
|
|
// Opening the browser: a text node opens Prompt Studio, any other node Current node.
|
|
assert.equal(pageForNode(null, kinds), null); // nothing selected: the page used last
|
|
assert.equal(pageForNode({ prompt: true }, kinds), 'prompts'); // CLIP Text Encode
|
|
assert.equal(pageForNode({}, kinds), 'assistant'); // KSampler
|
|
assert.equal(pageForNode({ model: true }, kinds), 'assistant'); // a loader
|
|
assert.equal(pageForNode({ prompt: true, model: true }, kinds), 'assistant'); // a loader with prompt boxes: its models first
|
|
|
|
// Number keys: 1-9 from the top of the rail.
|
|
const pages = ['home', 'activity', 'ai', 'models', 'gallery', 'recipes', 'combos', 'prompts', 'voices'].map(page => ({ page }));
|
|
const canvas = { closest: () => null };
|
|
const field = { closest: selector => (selector.includes('textarea') ? {} : null) };
|
|
const key = (code, extra = {}) => ({ code, key: code.slice(-1), target: canvas, ...extra });
|
|
|
|
assert.equal(railPageForKey(key('Digit1'), pages), 'home');
|
|
assert.equal(railPageForKey(key('Digit8'), pages), 'prompts');
|
|
assert.equal(railPageForKey(key('Numpad9'), pages), 'voices');
|
|
assert.equal(railPageForKey(key('Digit0'), pages), null);
|
|
assert.equal(railPageForKey(key('KeyW'), pages), null); // W stays ComfyUI's (the Workflows sidebar)
|
|
assert.equal(railPageForKey(key('Digit3', { target: field }), pages), null); // typing a number into a box
|
|
assert.equal(railPageForKey(key('Digit3', { ctrlKey: true }), pages), null);
|
|
assert.equal(railPageForKey(key('Digit3', { shiftKey: true }), pages), null);
|
|
assert.equal(railPageForKey(key('Digit3', { isComposing: true }), pages), null); // a Chinese input method choosing a word
|
|
assert.equal(railPageForKey(key('Digit3', { repeat: true }), pages), null);
|
|
assert.equal(railPageForKey({ code: '', key: '5', target: canvas }, pages), 'gallery'); // no code: by the key
|
|
assert.equal(railPageForKey(key('Digit9'), pages.slice(0, 3)), null); // fewer pages than keys
|
|
|
|
console.log('shell_open_rules: ok');
|