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");