MCPcopy Create free account
hub / github.com/error311/FileRise / previewFile

Function previewFile

public/js/filePreview.js:591–1106  ·  view source on GitHub ↗
(fileUrl, fileName)

Source from the content-addressed store, hash-verified

589
590/* -------------------------------- Entry -------------------------------- */
591export function previewFile(fileUrl, fileName) {
592 const overlay = ensureMediaModal();
593 const container = overlay.querySelector(".file-preview-container");
594 const actionWrap = overlay.querySelector(".media-right .action-group");
595 const statusChip = overlay.querySelector(".media-right .status-chip");
596
597 // replace nav buttons to clear old listeners
598 let prevBtn = overlay.querySelector('.nav-left');
599 let nextBtn = overlay.querySelector('.nav-right');
600 const newPrev = prevBtn.cloneNode(true);
601 const newNext = nextBtn.cloneNode(true);
602 prevBtn.replaceWith(newPrev);
603 nextBtn.replaceWith(newNext);
604 prevBtn = newPrev; nextBtn = newNext;
605
606 // reset
607 container.innerHTML = "";
608 actionWrap.innerHTML = "";
609 if (statusChip) statusChip.style.display = 'none';
610 setPreviewLoading(overlay, true, t('loading') || 'Loading...');
611 if (overlay._onKey) window.removeEventListener('keydown', overlay._onKey);
612 overlay._onKey = null;
613
614 const folder = window.currentFolder || 'root';
615 const name = fileName;
616 const lower = (name || '').toLowerCase();
617 const isSvg = SVG_RE.test(lower);
618 const isImage = IMG_RE.test(lower);
619 const isVideo = VID_RE.test(lower);
620 const isAudio = AUD_RE.test(lower);
621
622 // Base preview URL from the link we clicked
623 const baseUrl = fileUrl;
624
625 // Use the same preview endpoint, just swap the "file" param.
626 function siblingPreviewUrl(newName) {
627 try {
628 const u = new URL(baseUrl, window.location.origin);
629 u.searchParams.set('file', newName);
630 // cache-bust so we don’t get stale frames
631 u.searchParams.set('t', String(Date.now()));
632 return u.toString();
633 } catch (e) {
634 // Fallback: go through generic download/inline endpoint
635 return buildPreviewUrl(folder, newName);
636 }
637 }
638
639 setTitle(overlay, name);
640 if (isSvg) {
641 const downloadBtn = makeDownloadButton(folder, () => name);
642 actionWrap.appendChild(downloadBtn);
643
644 container.textContent =
645 t("svg_preview_disabled") ||
646 "SVG preview is disabled for security. Use Download to view this file.";
647 setPreviewLoading(overlay, false);
648 overlay.style.display = "flex";

Callers 1

menuClickDelegateFunction · 0.85

Calls 15

ensureMediaModalFunction · 0.85
setPreviewLoadingFunction · 0.85
tFunction · 0.85
setTitleFunction · 0.85
makeDownloadButtonFunction · 0.85
makeTopIconFunction · 0.85
setNavVisibilityFunction · 0.85
navigateFunction · 0.85
setPdfSrcFunction · 0.85
loadSavedMediaVolumeFunction · 0.85
attachVolumePersistenceFunction · 0.85
buildPreviewUrlFunction · 0.85

Tested by

no test coverage detected