From 6660372018a0dd190b878a9e7d55d6f797d141ff Mon Sep 17 00:00:00 2001 From: frikky Date: Wed, 3 Nov 2021 01:11:42 +0100 Subject: [PATCH] Added copy-pasting of MULTIPLE nodes in and between workflows --- frontend/src/views/AngularWorkflow.jsx | 90 ++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 12 deletions(-) diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx index 1c13d698..6ee4bec4 100644 --- a/frontend/src/views/AngularWorkflow.jsx +++ b/frontend/src/views/AngularWorkflow.jsx @@ -2497,7 +2497,7 @@ const AngularWorkflow = (props) => { } } - var previouskey = 0 + //var previouskey = 0 const handleKeyDown = (event) => { switch( event.keyCode ) { case 27: @@ -2521,25 +2521,65 @@ const AngularWorkflow = (props) => { console.log("RIGHT") break; case 90: - if (previouskey === 17) { + if (event.ctrlKey) { console.log("CTRL+Z") } break; case 67: - if (previouskey === 17) { + console.log(event) + if (event.ctrlKey) { console.log("CTRL+C") + if (cy !== undefined) { + var cydata = cy.$(':selected').jsons() + if (cydata !== undefined && cydata !== null && cydata.length > 0) { + console.log(cydata) + const elementName = "copy_element_shuffle" + var copyText = document.getElementById(elementName) + if (copyText !== null && copyText !== undefined) { + const clipboard = navigator.clipboard + if (clipboard === undefined) { + alert.error("Can only copy over HTTPS (port 3443)") + return + } + + navigator.clipboard.writeText(JSON.stringify(cydata)) + copyText.select() + copyText.setSelectionRange(0, 99999); /* For mobile devices */ + document.execCommand("copy") + alert.success(`Copied ${cydata.length} elements`) + } + } + } } break; case 86: - if (previouskey === 17) { + if (event.ctrlKey) { console.log("CTRL+V") + + // The below parts are handled in the function handlePaste() + /* + const clipboard = navigator.clipboard + if (clipboard === undefined || window === undefined || window === null) { + alert.error("Can only use cliboard over HTTPS (port 3443)") + return + } + + console.log("CLIPBOARD: ", window.clipboardData) + const pastedData = window.clipboardData.getData('Text'); + console.log("PASTED: ", pastedData) + + + //var tmpAuth = JSON.parse(JSON.stringify(appAuthentication)) + var jsonvalid = true + var parsedjson = [] + */ } break; case 88: - if (previouskey === 17) { - console.log("CTRL+V") + if (event.ctrlKey) { + console.log("CTRL+X") } break; case 83: @@ -2549,18 +2589,44 @@ const AngularWorkflow = (props) => { break; case 65: // As a poweruser myself, I found myself hitting this a few - // too many times to just edit text. Need a better bind - - break; - default: - break; + // too many times to just edit text. Need a better bind, which does NOT work while inside a field + break; + default: + break; } - previouskey = event.keyCode + //previouskey = event.keyCode + } + + const handlePaste = (event) => { + event.preventDefault(); + const clipboard = (event.originalEvent || event).clipboardData.getData('text/plain'); + //console.log("Text: ", clipboard) + //window.document.execCommand('insertText', false, text); + // + try { + const parsedjson = JSON.parse(clipboard) + //console.log("Parsed: ", parsedjson) + + for (var key in parsedjson) { + const item = parsedjson[key] + console.log("Adding: ", item) + + cy.add({ + group: item.group, + data: item.data, + position: item.position, + }) + } + } catch (e) { + console.log(e) + alert.info("Failed parsing clipboard: ", e) + } } const registerKeys = () => { document.addEventListener("keydown", handleKeyDown); + document.addEventListener('paste', handlePaste) } const getEnvironments = () => {