diff --git a/app/templates/local_workspace.html b/app/templates/local_workspace.html index cbd60e8..bd2548c 100644 --- a/app/templates/local_workspace.html +++ b/app/templates/local_workspace.html @@ -796,40 +796,72 @@ window._wsInitData = (function() { return null; }, - // ── Preview panel ── + // ── Preview panel (vanilla JS — Alpine x-if/x-show broken in 3.14.9) ── selectForPreview(node) { - this.previewItem = node; - this.previewPanelContent = '
Loading...
'; - this._loadPreviewContent(node); + var panel = document.getElementById('ws-preview-panel'); + if (!panel) return; + // Populate panel + document.getElementById('ws-preview-icon').innerHTML = this._fileIcon(node.name, node.is_folder, node.content_format); + document.getElementById('ws-preview-title').textContent = node.name; + document.getElementById('ws-preview-type').textContent = node.is_folder ? 'Folder' : this._fileTypeLabel(node.name, node.content_format); + document.getElementById('ws-preview-size').textContent = node.size_display || '-'; + document.getElementById('ws-preview-date').textContent = this._formatDate(node.updated_at); + // Tags + var tagDiv = document.getElementById('ws-preview-tags'); + tagDiv.innerHTML = ''; + if (node.tags && node.tags.length > 0) { + tagDiv.style.display = 'flex'; + for (var i = 0; i < node.tags.length; i++) { + var t = node.tags[i]; + tagDiv.innerHTML += '' + this._escHtml(t.name) + ''; + } + } else { + tagDiv.style.display = 'none'; + } + // Open button + var openBtn = document.getElementById('ws-preview-open-btn'); + openBtn.onclick = function() { window.location = '/pages/' + node.id; }; + // Body + document.getElementById('ws-preview-body').innerHTML = '
Loading...
'; + // Show panel + panel.style.display = 'flex'; + // Load content async + this._loadPreviewContentVanilla(node); }, - async _loadPreviewContent(node) { + closePreviewPanel() { + var panel = document.getElementById('ws-preview-panel'); + if (panel) panel.style.display = 'none'; + this.previewItem = null; + }, + + async _loadPreviewContentVanilla(node) { + var body = document.getElementById('ws-preview-body'); + if (!body) return; if (node.is_folder) { - this.previewPanelContent = '
' - + ''+getSvgIcon('folder',32)+'' - + '
' + (node.child_count||0) + ' item(s)
' - + 'Open folder' + body.innerHTML = '
' + + '' + getSvgIcon('folder',32) + '' + + '
' + (node.child_count||0) + ' item(s)
' + + 'Open folder' + '
'; return; } try { var name = (node.name || '').toLowerCase(); - // Image preview if (/\.(png|jpe?g|gif|webp|svg|bmp|ico)$/.test(name)) { var wsId = 1; var imgUrl = '/api/files/' + wsId + '/' + encodeURIComponent(node.name); - this.previewPanelContent = '
' - + '' + body.innerHTML = '
' + + '' + '
'; return; } - // PDF preview if (/\.pdf$/.test(name)) { - this.previewPanelContent = '
' - + ''+getSvgIcon('file',32)+'' - + '
' + this._escHtml(node.name) + '
' - + '
' + (node.size_display || '') + '
' - + 'Open in viewer' + body.innerHTML = '
' + + '' + getSvgIcon('file',32) + '' + + '
' + this._escHtml(node.name) + '
' + + '
' + (node.size_display || '') + '
' + + 'Open in viewer' + '
'; return; } @@ -841,14 +873,13 @@ window._wsInitData = (function() { try { var meta = JSON.parse(content); if (meta.file_path && /\.(png|jpe?g|gif|webp|svg|bmp|ico)$/i.test(meta.file_path)) { - var wsId2 = 1; - var imgUrl2 = '/api/files/' + wsId2 + '/' + encodeURIComponent(meta.file_path); - this.previewPanelContent = ''; + var imgUrl2 = '/api/files/' + 1 + '/' + encodeURIComponent(meta.file_path); + body.innerHTML = ''; return; } } catch(e) {} - preview = '
' - + ''+getSvgIcon('file',32)+'' + preview = '
' + + '' + getSvgIcon('file',32) + '' + (node.size_display || '') + ' — open to view
'; } else if (format === 'blocks') { try { @@ -856,16 +887,16 @@ window._wsInitData = (function() { if (blocks && blocks.blocks) { preview = blocks.blocks.slice(0, 30).map(function(b) { var txt = b.content || b.text || (typeof b === 'string' ? b : ''); - return '
' + this._escHtml(txt) + '
'; + return '
' + this._escHtml(txt) + '
'; }, this).join(''); } } catch(e) { preview = '
' + this._escHtml(String(content).substring(0, 2000)) + '
'; } } else { preview = '
' + this._escHtml(String(content).substring(0, 2000)) + '
'; } - this.previewPanelContent = preview || '
(empty)
'; + body.innerHTML = preview || '
(empty)
'; } catch(e) { - this.previewPanelContent = '
Preview not available
'; + body.innerHTML = '
Preview not available
'; } }, @@ -2800,33 +2831,27 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind
- -
-