aboutsummaryrefslogtreecommitdiffstats
path: root/javascript/edit-order.js
blob: e924d419bb1bd656cf416134bd96a4bfde7217b8 (plain)
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
function keyupEditOrder(event){
	let target = event.originalTarget || event.composedPath()[0];
	if (!target.matches("*:is([id*='_toprow'] [id*='_prompt'], .prompt) textarea")) return;
	if (!event.metaKey && !event.ctrlKey) return;

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

	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);
});