Unified · Split
| @@ -526,21 +526,3 @@ $.highlight = function (el, options) { · 525 unmodified lines | |||
| 526 | el.classList.add(options.className); | 526 | el.classList.add(options.className); |
| 527 | setTimeout(() => el.classList.remove(options.className), options.delay); | 527 | setTimeout(() => el.classList.remove(options.className), options.delay); |
| 528 | }; | 528 | }; |
| 529 | |||
| 530 | $.copyToClipboard = function (string) { | ||
| 531 | let result; | ||
| 532 | const textarea = document.createElement("textarea"); | ||
| 533 | textarea.style.position = "fixed"; | ||
| 534 | textarea.style.opacity = 0; | ||
| 535 | textarea.value = string; | ||
| 536 | document.body.appendChild(textarea); | ||
| 537 | try { | ||
| 538 | textarea.select(); | ||
| 539 | result = !!document.execCommand("copy"); | ||
| 540 | } catch (error) { | ||
| 541 | result = false; | ||
| 542 | } finally { | ||
| 543 | document.body.removeChild(textarea); | ||
| 544 | } | ||
| 545 | return result; | ||
| 546 | }; | ||
| @@ -217,10 +217,9 @@ app.views.EntryPage = class EntryPage extends app.View { · 216 unmodified lines | |||
| 217 | this.load(); | 217 | this.load(); |
| 218 | } else if (target.classList.contains("_pre-clip")) { | 218 | } else if (target.classList.contains("_pre-clip")) { |
| 219 | $.stopEvent(event); | 219 | $.stopEvent(event); |
| 220 | target.classList.add( | 220 | navigator.clipboard.writeText(target.parentNode.textContent).then( |
| 221 | $.copyToClipboard(target.parentNode.textContent) | 221 | () => target.classList.add("_pre-clip-success"), |
| 222 | ? "_pre-clip-success" | 222 | () => target.classList.add("_pre-clip-error"), |
| 223 | : "_pre-clip-error", | ||
| 224 | ); | 223 | ); |
| 225 | setTimeout(() => (target.className = "_pre-clip"), 2000); | 224 | setTimeout(() => (target.className = "_pre-clip"), 2000); |
| 226 | } | 225 | } |