]> git.ardis.lu - solc-metadata/commitdiff
Disable button and show spinner while loading
authorArdis Lu <ardisglu@gmail.com>
Sun, 7 May 2023 02:58:46 +0000 (19:58 -0700)
committerArdis Lu <ardisglu@gmail.com>
Sun, 7 May 2023 02:58:46 +0000 (19:58 -0700)
index.html

index b920de39d12109f0121f2c84d07e4715167bc00a..0b70cf7b5d0ed1cce9281e9d8c42238341f94015 100644 (file)
       background: hsl(216deg 50% 95%);
       border: 1px solid hsl(216deg 70% 50%);
       border-radius: 4px;
+      margin-inline-end: 8px;
       cursor: pointer;
       transition: filter 600ms;
     }
 
-    :is(input, output, button):is(:hover, :focus-within) {
+    button:disabled {
+      cursor: not-allowed;
+      border: 1px solid hsl(216deg 70% 75%);
+    }
+
+    :is(input, output, button:not(:disabled)):is(:hover, :focus-within) {
       filter: drop-shadow(0 0 2px hsl(216deg 70% 50%));
       transition: filter 200ms;
     }
       white-space: nowrap;
       border-width: 0;
     }
+
+    @keyframes spin {
+      100% {
+        transform: rotate(360deg);
+      }
+    }
+
+    .inline-spinner {
+      display: inline-block;
+      box-sizing: border-box;
+      block-size: 1em;
+      inline-size: 1em;
+      border: 0.25em solid transparent;
+      border-block-start: 0.25em solid black;
+      border-radius: 50%;
+      animation: spin 1s infinite;
+      visibility: hidden;
+    }
   </style>
 </head>
 
       <label for="ipfs">IPFS gateway</label>
       <input type="url" name="ipfs" id="ipfs" required value="https://cf-ipfs.com">
 
-      <button>Get metadata</button>
+      <div>
+        <button>Get metadata</button>
+        <span class="inline-spinner"></span>
+      </div>
 
       <label for="result" class="sr-only">Full JSON metadata</label>
       <output name="result" id="result"></output>
   <script type="module">
     import { fetchBytecode, extractCBOR, decodeCBOR, calculateCID, fetchJSONMetadata } from '/index.js';
 
+    const button = document.querySelector('button');
+    const spinner = document.querySelector('.inline-spinner');
+
     document.querySelector('form').addEventListener('submit', async e => {
       e.preventDefault();
 
       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.textContent = '';
           result.textContent += `❌ Failed to fetch JSON metadata from IPFS CIDv1: ${cidV1}`;
         }
       }
-    })
+
+      button.disabled = false;
+      spinner.style.setProperty('visibility', 'hidden');
+    });
   </script>
 </body>
 
This page took 0.039327 seconds and 4 git commands to generate.