From da405ceee628dca739a12b234a6094a8ebae9c94 Mon Sep 17 00:00:00 2001 From: maTh Date: Tue, 29 Aug 2023 23:15:19 +0200 Subject: Fix: sharing via clipboard for no https/localhost environments (#5606) * Update main.js * Update p/scripts/main.js Co-authored-by: Frans de Jonge * improved with negative feedback * Update p/scripts/main.js Co-authored-by: Alexandre Alapetite --------- Co-authored-by: Frans de Jonge Co-authored-by: Alexandre Alapetite --- p/scripts/main.js | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'p/scripts') diff --git a/p/scripts/main.js b/p/scripts/main.js index 3704be7ab..7c8eb90e2 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -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) { -- cgit v1.2.3