diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-07-08 13:12:01 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-08 13:12:01 +0000 |
commit | 12a29a677ac20a726ce10d84631c224519ab9bc9 (patch) | |
tree | 68ef1026565d1e26c746f90d2f20291451951751 /javascript/edit-order.js | |
parent | 274a3e21babe5fa913b4a34d49b5d7cd72c5fa89 (diff) | |
parent | 6645f23c4c715b1bc704c88a499b2f4224d7f1e6 (diff) | |
download | stable-diffusion-webui-gfx803-12a29a677ac20a726ce10d84631c224519ab9bc9.tar.gz stable-diffusion-webui-gfx803-12a29a677ac20a726ce10d84631c224519ab9bc9.tar.bz2 stable-diffusion-webui-gfx803-12a29a677ac20a726ce10d84631c224519ab9bc9.zip |
Merge pull request #10650 from missionfloyd/reorder-hotkeys
Hotkeys to move prompt elements
Diffstat (limited to 'javascript/edit-order.js')
-rw-r--r-- | javascript/edit-order.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/javascript/edit-order.js b/javascript/edit-order.js new file mode 100644 index 00000000..50f7fe37 --- /dev/null +++ b/javascript/edit-order.js @@ -0,0 +1,37 @@ +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.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); +}); |