Strengthen search breadth and modal fitting
build-push / docker (push) Successful in 4m14s

This commit is contained in:
AI Assistant
2026-03-17 13:10:53 +09:00
parent 2fe1bd8ffe
commit 5ca7aef3f1
10 changed files with 110 additions and 49 deletions
+29 -4
View File
@@ -38,6 +38,7 @@ const downloadLogs = document.getElementById("downloadLogs");
const debugLogList = document.getElementById("debugLogList");
const debugSummary = document.getElementById("debugSummary");
const resultModal = document.getElementById("resultModal");
const resultModalShell = document.getElementById("resultModalShell");
const resultModalTitle = document.getElementById("resultModalTitle");
const resultModalSource = document.getElementById("resultModalSource");
const resultModalSnippet = document.getElementById("resultModalSnippet");
@@ -56,6 +57,7 @@ const resultModalSecondaryAction = document.getElementById("resultModalSecondary
const closeResultModal = document.getElementById("closeResultModal");
const resultModalReady = Boolean(
resultModal &&
resultModalShell &&
resultModalTitle &&
resultModalSource &&
resultModalSnippet &&
@@ -436,12 +438,30 @@ function resetPreviewPlayer() {
function showModal(element) {
setHidden(element, false);
if (element === resultModal) {
syncResultModalLayout();
}
}
function hideModal(element) {
setHidden(element, true);
}
function syncResultModalLayout() {
if (!resultModalReady) {
return;
}
const viewportWidth = Math.max(320, window.innerWidth || document.documentElement.clientWidth || 0);
const viewportHeight = Math.max(320, window.innerHeight || document.documentElement.clientHeight || 0);
const shellWidth = Math.min(1150, viewportWidth - 16);
const shellHeight = Math.min(840, viewportHeight - 12);
const mediaHeight = Math.max(150, Math.min(Math.floor(viewportHeight * 0.32), 320));
resultModalShell.style.setProperty("--result-modal-shell-width", `${shellWidth}px`);
resultModalShell.style.setProperty("--result-modal-shell-height", `${shellHeight}px`);
resultModalShell.style.setProperty("--result-modal-media-max-height", `${mediaHeight}px`);
resultModalShell.classList.toggle("result-modal-compact", viewportHeight < 900 || viewportWidth < 1280);
}
function buildResultModalEmbedURL(item) {
if (item?.embedUrl) {
if (item.source === "Google Video" && item.embedUrl.includes("youtube-nocookie.com/embed/")) {
@@ -589,7 +609,7 @@ async function fetchResultPreview(item) {
}
const request = (async () => {
try {
const preview = await api("/api/download/preview", {
const preview = await api("/api/download/preview", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ url: key }),
@@ -671,10 +691,10 @@ function renderResults(results) {
node.addEventListener("click", () => openResultModal(item));
previewVideo.poster = usableThumbnail ? item.thumbnailUrl : "";
const mediaArea = node.querySelector(".relative");
if (item.previewVideoUrl || item.source === "Google Video") {
if (item.previewVideoUrl || item.source === "Google Video" || item.source === "Artgrid") {
mediaArea.addEventListener("mouseenter", async () => {
let previewURL = item.previewVideoUrl || "";
if (!previewURL && item.source === "Google Video") {
if (!previewURL && (item.source === "Google Video" || item.source === "Artgrid")) {
const preview = await fetchResultPreview(item);
previewURL = preview?.previewStreamUrl || "";
}
@@ -749,7 +769,7 @@ async function openResultModal(item) {
const embedURL = buildResultModalEmbedURL(item);
const fallbackReason = item.previewBlockedReason || "Embedded view was unavailable, switched to fallback preview.";
let resolvedPreviewURL = item.previewVideoUrl || "";
if (!resolvedPreviewURL && item.source === "Google Video") {
if (!resolvedPreviewURL && (item.source === "Google Video" || item.source === "Artgrid")) {
const preview = await fetchResultPreview(item);
resolvedPreviewURL = preview?.previewStreamUrl || "";
}
@@ -1030,6 +1050,11 @@ if (resultModalReady) {
}
});
}
window.addEventListener("resize", () => {
if (resultModalReady && !resultModal.classList.contains("hidden")) {
syncResultModalLayout();
}
});
for (const button of platformToggles) {
button.addEventListener("click", () => {
const platform = button.dataset.platformToggle;