diff --git a/public/uk/radicle-web-service-deployment.gmi b/public/uk/radicle-web-service-deployment.gmi index 96a289d..ccee9d7 100644 --- a/public/uk/radicle-web-service-deployment.gmi +++ b/public/uk/radicle-web-service-deployment.gmi @@ -195,6 +195,40 @@ $: portFragment = ``` * через що може не працювати внутрішня навігація по сідам а також приклади команд типу `git clone`, виключаючи з URL не типовий для HTTP/80 порт (`8788`) якщо той використовується +### Зауваження щодо HTTP + +Якщо відкрити Веб-інтерфейс Radicle на віддаленому (не `localhost`) сервері з протоколом HTTP, то при копіюванні адрес репозиторію до буферу - в консолі браузера буде помилка: + +> Uncaught (in promise) TypeError: can't access property "writeText", navigator.clipboard is undefined + +Вона означає, що сучасна політика браузера блокує функціональність буферу копіювання для не захищеного протоколу HTTP, за виключенням `localhost` або при ручному додаванні такого виключення через `about:config`. Звісно, для продакшну це не варіант, бо переважна більшість користувачів через захищену природу оверлейних мереж, не користуються HTTPs і вважають таке явище - швидше не правильно налаштованим Nginx, аніж фічею. + +Отже, якщо не плануєте "силою" заганяти юзерів на HTTPs (з само-підписаним сертифікатом) то рішення я знайшов тільки у застосуванні патчу `src/lib/utils.ts`, із заміною його функції `toClipboard` на "legacy-fallback" через `copyToClipboard`: + +``` src/lib/utils.ts +async function copyToClipboard(text: string) { + if (navigator.clipboard && window.isSecureContext) { + await navigator.clipboard.writeText(text); + } else { + const textArea = document.createElement("textarea"); + textArea.value = text; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + try { + document.execCommand('copy'); + } catch (err) { + console.error('Unable to copy', err); + } + document.body.removeChild(textArea); + } +} +export async function toClipboard(text: string): Promise { + await copyToClipboard(text); +} +``` +* Firefox 148 - все ще підтримує `document.execCommand('copy')` + ### Компіляція Після завершення конфігурації, на локальній машині збираємо оптимізовану статику і для зручності передачі на сервер, запаковуємо вміст `build` до архіву `radicle-explorer.tar.gz`: