diff --git a/frontend/editor-poc.html b/frontend/editor-poc.html index ea740e4..265aa37 100644 --- a/frontend/editor-poc.html +++ b/frontend/editor-poc.html @@ -233,9 +233,6 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig
Saved
- - - @@ -1407,26 +1404,24 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig btnPreview.addEventListener('click', togglePreview); - // Action buttons (delete/cancel/save) — same as basic editor - document.getElementById('forge-save').addEventListener('click', function() { forceSave(); }); - document.getElementById('forge-cancel').addEventListener('click', function() { - if (window.parent && window.parent !== window) { - window.parent.postMessage({ type: 'forge-close' }, '*'); + // Listen for parent save/delete commands (parent modal buttons) + window.addEventListener('message', function(e) { + if (!e.data || !e.data.type) return; + if (e.data.type === 'parent-save') { forceSave(); } + if (e.data.type === 'parent-delete') { + if (!fileVault || !filePath) return; + if (!confirm('Supprimer definitivement ' + filePath + ' ?')) return; + fetch('/api/file/' + encodeURIComponent(fileVault) + '?path=' + encodeURIComponent(filePath), { + method: 'DELETE', credentials: 'include' + }).then(function(r) { + if (!r.ok) throw new Error('HTTP ' + r.status); + showToast('Fichier supprime', 'ok'); + if (window.parent && window.parent !== window) { + window.parent.postMessage({ type: 'forge-close' }, '*'); + } + }).catch(function(e) { showToast('Echec suppression: ' + e.message, 'err'); }); } }); - document.getElementById('forge-delete').addEventListener('click', function() { - if (!fileVault || !filePath) return; - if (!confirm('Supprimer definitivement ' + filePath + ' ?')) return; - fetch('/api/file/' + encodeURIComponent(fileVault) + '?path=' + encodeURIComponent(filePath), { - method: 'DELETE', credentials: 'include' - }).then(function(r) { - if (!r.ok) throw new Error('HTTP ' + r.status); - showToast('Fichier supprime', 'ok'); - if (window.parent && window.parent !== window) { - window.parent.postMessage({ type: 'forge-close' }, '*'); - } - }).catch(function(e) { showToast('Echec suppression: ' + e.message, 'err'); }); - }); document.getElementById('poc-title').addEventListener('input', function() { markDirty(); }); diff --git a/frontend/js/utils.js b/frontend/js/utils.js index fd35849..5c9c2d8 100644 --- a/frontend/js/utils.js +++ b/frontend/js/utils.js @@ -491,6 +491,20 @@ function closeEditor() { } async function saveFile(silent = false) { + // If Forge is open, delegate save to the iframe + var forgeFrame = document.getElementById("forge-iframe"); + if (forgeFrame && forgeFrame.contentWindow) { + if (!state.editorVault || !state.editorPath) return; + var saveBtn = document.getElementById("editor-save"); + var saveDot = document.getElementById("editor-save-dot"); + var saveLabel = document.getElementById("editor-save-label"); + if (saveDot) { saveDot.className = 'editor-save-dot saving'; } + if (saveLabel) saveLabel.textContent = 'Saving...'; + if (saveBtn) { saveBtn.disabled = true; } + forgeFrame.contentWindow.postMessage({ type: 'parent-save' }, '*'); + return; + } + if ((!state.editorView && !state.fallbackEditorEl) || !state.editorVault || !state.editorPath) return; const content = state.editorView ? state.editorView.state.doc.toString() : state.fallbackEditorEl.value; @@ -559,6 +573,14 @@ async function saveFile(silent = false) { } async function deleteFile() { + // If Forge is open, delegate delete to the iframe + var forgeFrame = document.getElementById("forge-iframe"); + if (forgeFrame && forgeFrame.contentWindow) { + if (!state.editorVault || !state.editorPath) return; + forgeFrame.contentWindow.postMessage({ type: 'parent-delete' }, '*'); + return; + } + if (!state.editorVault || !state.editorPath) return; const deleteBtn = document.getElementById("editor-delete"); diff --git a/frontend/js/viewer.js b/frontend/js/viewer.js index 7edc9e9..804f738 100644 --- a/frontend/js/viewer.js +++ b/frontend/js/viewer.js @@ -525,14 +525,10 @@ export function renderFile(data) { forgeBtn.addEventListener("click", () => { var modal = document.getElementById("editor-modal"); var container = modal.querySelector(".editor-container"); - var headerEl = modal.querySelector(".editor-header"); - var footerEl = modal.querySelector(".editor-footer"); var bodyEl = document.getElementById("editor-body"); - // Hide header/footer since Forge has its own - if (headerEl) headerEl.style.display = "none"; - if (footerEl) footerEl.style.display = "none"; - // Make container fill the modal - if (container) container.style.maxHeight = "100vh"; + // Set editor state so parent buttons work + state.editorVault = data.vault; + state.editorPath = data.path; bodyEl.innerHTML = ""; bodyEl.style.overflow = "hidden"; var iframe = document.createElement("iframe");