From 6c2ff05480850ea847c3f26e603a9b2005dd7a61 Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Wed, 8 Nov 2023 20:37:24 -0800 Subject: [PATCH] Block inflight form re-submission from all sources Disabling button only blocks the button, not form inputs --- index.html | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index ee64818..1040d09 100644 --- a/index.html +++ b/index.html @@ -73,16 +73,21 @@ transition: filter 600ms; } - button:disabled { + [data-submitting] button { cursor: not-allowed; border: 1px solid hsl(216deg 70% 75%); } - :is(input, output, button:not(:disabled)):is(:hover, :focus-within) { + :is(input, output, button):is(:hover, :focus-within) { filter: drop-shadow(0 0 2px hsl(216deg 70% 50%)); transition: filter 200ms; } + [data-submitting] button:is(:hover, :focus-within) { + filter: unset; + transition: unset; + } + output { font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; box-sizing: border-box; @@ -261,23 +266,26 @@ document.querySelector('form').addEventListener('submit', async e => { e.preventDefault(); + if (e.target.hasAttribute('data-submitting')) { + return; + } + e.target.setAttribute('data-submitting', ''); + spinner.style.setProperty('visibility', 'visible'); + const data = new FormData(e.target); const address = data.get('address'); const rpc = new URL(data.get('rpc')); const ipfs = new URL(data.get('ipfs')); const result = e.target.elements['result']; - button.disabled = true; - spinner.style.setProperty('visibility', 'visible'); - // Reset the output, if there were previous runs result.innerHTML = ''; result.style.setProperty('visibility', 'visible'); await handleData(address, rpc, ipfs, result); - button.disabled = false; spinner.style.setProperty('visibility', 'hidden'); + e.target.removeAttribute('data-submitting'); }); -- 2.47.3