Add reorder hotkeys
Shifts selected items with ctrl+left/right
This commit is contained in:
parent
89f9faa633
commit
468056958b
|
@ -0,0 +1,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);
|
||||
});
|
Loading…
Reference in New Issue