|
8 | 8 | rel="icon" |
9 | 9 | href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🛠️</text></svg>" |
10 | 10 | /> |
11 | | - <script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js"></script> |
| 11 | + <script |
| 12 | + src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js" |
| 13 | + integrity="sha512-CSBhVREyzHAjAFfBlIBakjoRUKp5h7VSweP0InR/pAJyptH7peuhCsqAI/snV+TwZmXZqoUAZpXAN8x1ouSiQ==" |
| 14 | + crossorigin="anonymous" |
| 15 | + referrerpolicy="no-referrer" |
| 16 | + ></script> |
12 | 17 | <style> |
13 | 18 | * { |
14 | 19 | box-sizing: border-box; |
@@ -302,6 +307,18 @@ <h1>YAML Sorter</h1> |
302 | 307 |
|
303 | 308 | try { |
304 | 309 | const parsed = jsyaml.load(raw); |
| 310 | + if ( |
| 311 | + typeof parsed !== "object" || |
| 312 | + parsed === null || |
| 313 | + Array.isArray(parsed) |
| 314 | + ) { |
| 315 | + inputStatus.textContent = "Not a mapping"; |
| 316 | + inputStatus.className = "status error"; |
| 317 | + output.value = jsyaml.dump(parsed, { lineWidth: -1 }); |
| 318 | + outputStatus.textContent = "No keys to sort"; |
| 319 | + outputStatus.className = "status empty"; |
| 320 | + return; |
| 321 | + } |
305 | 322 | const keyCount = Object.keys(parsed).length; |
306 | 323 | inputStatus.textContent = `${keyCount} key${keyCount !== 1 ? "s" : ""}`; |
307 | 324 | inputStatus.className = "status ok"; |
@@ -333,14 +350,22 @@ <h1>YAML Sorter</h1> |
333 | 350 |
|
334 | 351 | copyBtn.addEventListener("click", () => { |
335 | 352 | if (!output.value) return; |
336 | | - navigator.clipboard.writeText(output.value).then(() => { |
337 | | - copyBtn.textContent = "Copied!"; |
338 | | - copyBtn.classList.add("copied"); |
339 | | - setTimeout(() => { |
340 | | - copyBtn.textContent = "Copy"; |
341 | | - copyBtn.classList.remove("copied"); |
342 | | - }, 1500); |
343 | | - }); |
| 353 | + navigator.clipboard.writeText(output.value).then( |
| 354 | + () => { |
| 355 | + copyBtn.textContent = "Copied!"; |
| 356 | + copyBtn.classList.add("copied"); |
| 357 | + setTimeout(() => { |
| 358 | + copyBtn.textContent = "Copy"; |
| 359 | + copyBtn.classList.remove("copied"); |
| 360 | + }, 1500); |
| 361 | + }, |
| 362 | + () => { |
| 363 | + copyBtn.textContent = "Failed!"; |
| 364 | + setTimeout(() => { |
| 365 | + copyBtn.textContent = "Copy"; |
| 366 | + }, 1500); |
| 367 | + }, |
| 368 | + ); |
344 | 369 | }); |
345 | 370 | </script> |
346 | 371 |
|
|
0 commit comments