|
|
@@ -1087,11 +1087,31 @@ function init_stream(stream) {
|
|
|
}
|
|
|
|
|
|
el = ev.target.closest('.item.share > button[data-type="clipboard"]');
|
|
|
- if (el && navigator.clipboard) { // Clipboard
|
|
|
- navigator.clipboard.writeText(el.dataset.url);
|
|
|
- el.classList.remove('ok');
|
|
|
- el.dataset.foo = el.offsetWidth; // it does nothing, but it is needed. See https://github.com/FreshRSS/FreshRSS/pull/5295
|
|
|
- el.classList.add('ok');
|
|
|
+ if (el) { // Clipboard
|
|
|
+ if (navigator.clipboard) {
|
|
|
+ navigator.clipboard.writeText(el.dataset.url)
|
|
|
+ .then(() => {
|
|
|
+ toggleClass(el, 'error');
|
|
|
+ })
|
|
|
+ .catch(e => {
|
|
|
+ console.log(e);
|
|
|
+ toggleClass(el, 'error');
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // fallback, if navigator.clipboard is not available f.e. if access is not via https or localhost
|
|
|
+ const inputElement = document.createElement('input');
|
|
|
+ inputElement.value = el.dataset.url;
|
|
|
+ document.body.appendChild(inputElement);
|
|
|
+ inputElement.select();
|
|
|
+ if (document.execCommand && document.execCommand('copy')) {
|
|
|
+ toggleClass(el, 'ok');
|
|
|
+ } else {
|
|
|
+ console.log('document.execCommand("copy") failed');
|
|
|
+ toggleClass(el, 'error');
|
|
|
+ }
|
|
|
+ inputElement.remove();
|
|
|
+ }
|
|
|
+
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -1225,6 +1245,12 @@ function init_stream(stream) {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+function toggleClass(el, cssclass) {
|
|
|
+ el.classList.remove(cssclass);
|
|
|
+ el.dataset.foo = el.offsetWidth; // it does nothing, but it is needed. See https://github.com/FreshRSS/FreshRSS/pull/5295
|
|
|
+ el.classList.add(cssclass);
|
|
|
+}
|
|
|
+
|
|
|
function init_nav_entries() {
|
|
|
const nav_entries = document.getElementById('nav_entries');
|
|
|
if (nav_entries) {
|