aboutsummaryrefslogtreecommitdiffstats
path: root/javascript/edit-order.js
diff options
context:
space:
mode:
authormissionfloyd <missionfloyd@users.noreply.github.com>2023-05-23 02:46:25 +0000
committermissionfloyd <missionfloyd@users.noreply.github.com>2023-05-23 02:46:25 +0000
commit468056958b63cb869d627746b5b5a1c629fd7548 (patch)
tree7c6b96cad5c1bfd5d483db19471c87dcd7c45f8a /javascript/edit-order.js
parent89f9faa63388756314e8a1d96cf86bf5e0663045 (diff)
downloadstable-diffusion-webui-gfx803-468056958b63cb869d627746b5b5a1c629fd7548.tar.gz
stable-diffusion-webui-gfx803-468056958b63cb869d627746b5b5a1c629fd7548.tar.bz2
stable-diffusion-webui-gfx803-468056958b63cb869d627746b5b5a1c629fd7548.zip
Add reorder hotkeys
Shifts selected items with ctrl+left/right
Diffstat (limited to 'javascript/edit-order.js')
-rw-r--r--javascript/edit-order.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/javascript/edit-order.js b/javascript/edit-order.js
new file mode 100644
index 00000000..e924d419
--- /dev/null
+++ b/javascript/edit-order.js
@@ -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);
+});