Revert "peek panels: load full page editor in iframe + resize handles"

This reverts commit d13f13785b.
This commit is contained in:
2026-07-22 10:32:33 -04:00
parent d19668e60f
commit 514b1da9a7
4 changed files with 60 additions and 104 deletions
+21 -47
View File
@@ -631,44 +631,6 @@ window._wsInitData = (function() {
this.loadWorkspaceTags();
} catch(e) { console.error('Tree load error:', e); this.loaded = true; }
this._recompute();
this._initResizeHandle();
},
_initResizeHandle() {
var panel = document.getElementById('ws-preview-panel');
var handle = document.getElementById('ws-preview-resize-handle');
if (!panel || !handle) return;
var startX, startWidth, dragging = false;
handle.addEventListener('mousedown', function(e) {
e.preventDefault();
startX = e.clientX;
startWidth = panel.offsetWidth;
dragging = true;
document.body.style.userSelect = 'none';
});
document.addEventListener('mousemove', function(e) {
if (!dragging) return;
var deltaX = startX - e.clientX;
var newWidth = Math.max(300, Math.min(window.innerWidth * 0.9, startWidth + deltaX));
panel.style.width = newWidth + 'px';
});
document.addEventListener('mouseup', function(e) {
if (!dragging) return;
document.body.style.userSelect = '';
var moved = Math.abs(e.clientX - startX);
if (moved < 3) {
// Simple click — close panel
window._wsData.closePreviewPanel();
}
dragging = false;
// Save width preference
try { localStorage.setItem('fd_peek_width', panel.style.width); } catch(ex) {}
});
// Restore saved width
try {
var saved = localStorage.getItem('fd_peek_width');
if (saved) panel.style.width = saved;
} catch(ex) {}
},
_recompute() {
@@ -834,7 +796,7 @@ window._wsInitData = (function() {
return null;
},
// ── Preview panel (vanilla JS — loads /pages/{id}?embed=1 in iframe) ──
// ── Preview panel (vanilla JS — matches Library peek-overlay) ──
selectForPreview(node) {
var panel = document.getElementById('ws-preview-panel');
if (!panel) return;
@@ -857,9 +819,21 @@ window._wsInitData = (function() {
window.showToast('Failed to copy', 'error');
});
};
// Load the full page editor in iframe (reuses /pages/{id} code)
var iframe = document.getElementById('ws-preview-iframe');
if (iframe) iframe.src = '/pages/' + node.id + '?embed=1';
// Body: meta info header + loading indicator
var meta = '<div style="display:flex;gap:16px;flex-wrap:wrap;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--border);font-size:12px;color:var(--text-tertiary);">'
+ '<span>' + (node.is_folder ? 'Folder' : this._fileTypeLabel(node.name, node.content_format)) + '</span>'
+ '<span>' + (node.size_display || '-') + '</span>'
+ '<span>' + this._formatDate(node.updated_at) + '</span>'
+ '</div>';
if (node.tags && node.tags.length > 0) {
meta += '<div style="display:flex;gap:4px;flex-wrap:wrap;margin-bottom:12px;">';
for (var i = 0; i < node.tags.length; i++) {
var t = node.tags[i];
meta += '<span class="tag-chip" style="background:' + this._escHtml(t.color) + '">' + this._escHtml(t.name) + '</span>';
}
meta += '</div>';
}
document.getElementById('ws-preview-body').innerHTML = meta + '<div style="text-align:center;padding:40px;color:var(--text-tertiary)">Loading...</div>';
// Show panel with slide-in
panel.style.display = 'flex';
requestAnimationFrame(function() {
@@ -867,6 +841,8 @@ window._wsInitData = (function() {
panel.style.transform = 'translateX(0)';
});
});
// Load content async
this._loadPreviewContentVanilla(node);
},
closePreviewPanel() {
@@ -876,9 +852,6 @@ window._wsInitData = (function() {
var self = this;
setTimeout(function() {
panel.style.display = 'none';
// Clear iframe
var iframe = document.getElementById('ws-preview-iframe');
if (iframe) iframe.src = '';
self.previewItem = null;
}, 200);
},
@@ -2910,7 +2883,6 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind
<!-- Preview Panel — identical to Library peek-overlay -->
<div id="ws-preview-panel" style="position:fixed;top:0;right:0;width:560px;max-width:90vw;height:100vh;background:var(--bg-modal);border-left:1px solid var(--border);box-shadow:-8px 0 32px rgba(0,0,0,0.25);z-index:500;display:none;flex-direction:column;transform:translateX(100%);transition:transform 0.2s cubic-bezier(0.16,1,0.3,1);">
<div id="ws-preview-resize-handle" style="position:absolute;left:-4px;top:0;width:8px;height:100%;cursor:col-resize;z-index:501;" title="Drag to resize — click to close"></div>
<div class="peek-header" style="display:flex;align-items:center;gap:4px;padding:12px 16px;border-bottom:1px solid var(--border);">
<button onclick="window._wsData.closePreviewPanel()" title="Close" style="background:transparent;border:none;color:var(--text-secondary);cursor:pointer;padding:6px;border-radius:4px;display:flex;align-items:center;">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width:15px;height:15px;"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
@@ -2941,7 +2913,9 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind
</div>
</div>
</div>
<iframe id="ws-preview-iframe" src="" style="width:100%;height:100%;border:none;flex:1;" sandbox="allow-same-origin allow-scripts allow-forms allow-popups"></iframe>
<div id="ws-preview-body" style="flex:1;overflow-y:auto;padding:16px 20px;">
<div style="text-align:center;padding:60px 20px;color:var(--text-dim);">{{ fd_icon("file",32) }}<div style="margin-top:8px;font-size:14px;">Select a file to preview</div></div>
</div>
</div>
</div><!-- /ws-split -->