Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
automatic1111
GitHub Repository: automatic1111/stable-diffusion-webui
Path: blob/master/javascript/edit-order.js
3055 views
1
/* alt+left/right moves text in prompt */
2
3
function keyupEditOrder(event) {
4
if (!opts.keyedit_move) return;
5
6
let target = event.originalTarget || event.composedPath()[0];
7
if (!target.matches("*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea")) return;
8
if (!event.altKey) return;
9
10
let isLeft = event.key == "ArrowLeft";
11
let isRight = event.key == "ArrowRight";
12
if (!isLeft && !isRight) return;
13
event.preventDefault();
14
15
let selectionStart = target.selectionStart;
16
let selectionEnd = target.selectionEnd;
17
let text = target.value;
18
let items = text.split(",");
19
let indexStart = (text.slice(0, selectionStart).match(/,/g) || []).length;
20
let indexEnd = (text.slice(0, selectionEnd).match(/,/g) || []).length;
21
let range = indexEnd - indexStart + 1;
22
23
if (isLeft && indexStart > 0) {
24
items.splice(indexStart - 1, 0, ...items.splice(indexStart, range));
25
target.value = items.join();
26
target.selectionStart = items.slice(0, indexStart - 1).join().length + (indexStart == 1 ? 0 : 1);
27
target.selectionEnd = items.slice(0, indexEnd).join().length;
28
} else if (isRight && indexEnd < items.length - 1) {
29
items.splice(indexStart + 1, 0, ...items.splice(indexStart, range));
30
target.value = items.join();
31
target.selectionStart = items.slice(0, indexStart + 1).join().length + 1;
32
target.selectionEnd = items.slice(0, indexEnd + 2).join().length;
33
}
34
35
event.preventDefault();
36
updateInput(target);
37
}
38
39
addEventListener('keydown', (event) => {
40
keyupEditOrder(event);
41
});
42
43