File size: 1,597 Bytes
c9ea4f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* alt+left/right moves text in prompt */

function keyupEditOrder(event) {
    if (!opts.keyedit_move) return;

    let target = event.originalTarget || event.composedPath()[0];
    if (!target.matches("*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea")) return;
    if (!event.altKey) return;

    let isLeft = event.key == "ArrowLeft";
    let isRight = event.key == "ArrowRight";
    if (!isLeft && !isRight) return;
    event.preventDefault();

    let selectionStart = target.selectionStart;
    let selectionEnd = target.selectionEnd;
    let text = target.value;
    let items = text.split(",");
    let indexStart = (text.slice(0, selectionStart).match(/,/g) || []).length;
    let indexEnd = (text.slice(0, selectionEnd).match(/,/g) || []).length;
    let range = indexEnd - indexStart + 1;

    if (isLeft && indexStart > 0) {
        items.splice(indexStart - 1, 0, ...items.splice(indexStart, range));
        target.value = items.join();
        target.selectionStart = items.slice(0, indexStart - 1).join().length + (indexStart == 1 ? 0 : 1);
        target.selectionEnd = items.slice(0, indexEnd).join().length;
    } else if (isRight && indexEnd < items.length - 1) {
        items.splice(indexStart + 1, 0, ...items.splice(indexStart, range));
        target.value = items.join();
        target.selectionStart = items.slice(0, indexStart + 1).join().length + 1;
        target.selectionEnd = items.slice(0, indexEnd + 2).join().length;
    }

    event.preventDefault();
    updateInput(target);
}

addEventListener('keydown', (event) => {
    keyupEditOrder(event);
});