From 0befd161e31217c2aa24e42c6d35cbe85852c757 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Fri, 29 May 2026 20:21:08 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20openEditor,=20openShareDialog,=20clipboa?= =?UTF-8?q?rd=20fallback=20=E2=80=94=20boutons=20Copier/=C3=89diter/Partag?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/js/config.js | 2 +- frontend/js/viewer.js | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/js/config.js b/frontend/js/config.js index bc2f1c7..85a54c2 100644 --- a/frontend/js/config.js +++ b/frontend/js/config.js @@ -805,7 +805,7 @@ function renderSharesUI(shares) { } // ── Share Dialog (professional) ── -async function openShareDialog(vault, path) { +export async function openShareDialog(vault, path) { // First check if already shared let existingShare = null; try { diff --git a/frontend/js/viewer.js b/frontend/js/viewer.js index a7525ee..030e7c2 100644 --- a/frontend/js/viewer.js +++ b/frontend/js/viewer.js @@ -1,12 +1,13 @@ /* ObsiGate — Viewer module */ import { api } from './auth.js'; import { state } from './state.js'; -import { escapeHtml, safeCreateIcons, safeHighlight, getFileIcon } from './utils.js'; +import { escapeHtml, safeCreateIcons, safeHighlight, getFileIcon, openEditor } from './utils.js'; import { TabManager, closeMobileSidebar, ContextMenuManager, RightSidebarManager, showToast, buildFrontmatterCard } from './ui.js'; import { syncActiveFileTreeItem, searchByTag, TagFilterService } from './sidebar.js'; import { AutocompleteDropdown, performAdvancedSearch } from './search.js'; import { initDashboardTabs } from './sync.js'; import { DashboardStatsWidget, DashboardRecentWidget, DashboardBookmarkWidget, DashboardSharedWidget, DashboardConflictsWidget } from './dashboard.js'; +import { openShareDialog } from './config.js'; // --------------------------------------------------------------------------- // Outline/TOC Manager // --------------------------------------------------------------------------- @@ -450,7 +451,17 @@ export function renderFile(data) { const rawData = await api(rawUrl); state.cachedRawSource = rawData.raw; } - await navigator.clipboard.writeText(state.cachedRawSource); + if (navigator.clipboard) { + await navigator.clipboard.writeText(state.cachedRawSource); + } else { + // Fallback for non-secure contexts + const ta = document.createElement("textarea"); + ta.value = state.cachedRawSource; + ta.style.position = "fixed"; ta.style.opacity = "0"; + document.body.appendChild(ta); ta.select(); + document.execCommand("copy"); + document.body.removeChild(ta); + } copyBtn.lastChild.textContent = "Copié !"; setTimeout(() => (copyBtn.lastChild.textContent = "Copier"), 1500); } catch (err) {