( button: HTMLButtonElement, state: 'copied' | 'failed' )
| 221 | } |
| 222 | |
| 223 | function setCopyButtonFeedback( |
| 224 | button: HTMLButtonElement, |
| 225 | state: 'copied' | 'failed' |
| 226 | ): void { |
| 227 | const previousTimer = resetTimers.get(button) |
| 228 | if (previousTimer != null) window.clearTimeout(previousTimer) |
| 229 | |
| 230 | const copied = state === 'copied' |
| 231 | button.dataset.copyState = state |
| 232 | button.textContent = copied ? 'Copied' : 'Failed' |
| 233 | button.setAttribute('aria-label', copied ? 'Copied code block' : 'Copy failed') |
| 234 | button.title = copied ? 'Copied code block' : 'Copy failed' |
| 235 | |
| 236 | const resetTimer = window.setTimeout(() => { |
| 237 | button.textContent = 'Copy' |
| 238 | button.setAttribute('aria-label', 'Copy code block') |
| 239 | button.title = 'Copy code block' |
| 240 | delete button.dataset.copyState |
| 241 | resetTimers.delete(button) |
| 242 | }, 1400) |
| 243 | resetTimers.set(button, resetTimer) |
| 244 | } |
no test coverage detected