mirror of
https://github.com/Icinga/icinga-php-library.git
synced 2025-07-02 03:14:30 +02:00
50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
define(["../notjQuery"], function ($) {
|
|
|
|
"use strict";
|
|
|
|
class CopyToClipboard {
|
|
constructor(button)
|
|
{
|
|
button.classList.add('active');
|
|
button.removeAttribute('tabindex');
|
|
$(button).on('click', null, this.onClick, this);
|
|
}
|
|
|
|
onClick(event)
|
|
{
|
|
let button = event.currentTarget;
|
|
let clipboardSource = button.parentElement.querySelector("[data-clipboard-source]");
|
|
let copyText;
|
|
|
|
if (clipboardSource) {
|
|
copyText = clipboardSource.innerText;
|
|
} else {
|
|
throw new Error('Clipboard source is required but not provided');
|
|
}
|
|
|
|
if (navigator.clipboard) {
|
|
navigator.clipboard.writeText(copyText).then(() => {
|
|
let previousHtml = button.innerHTML;
|
|
button.innerText = button.dataset.copiedLabel;
|
|
button.classList.add('copied');
|
|
|
|
setTimeout(() => {
|
|
// after 4 second, reset it.
|
|
button.classList.remove('copied');
|
|
button.innerHTML = previousHtml;
|
|
}, 4000);
|
|
}).catch((err) => {
|
|
console.error('Failed to copy: ', err);
|
|
});
|
|
} else {
|
|
throw new Error('Copy to clipboard requires HTTPS connection');
|
|
}
|
|
|
|
event.stopPropagation();
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
|
|
return CopyToClipboard;
|
|
});
|