diff --git a/web/model-manager.css b/web/model-manager.css index a205b26..787758f 100644 --- a/web/model-manager.css +++ b/web/model-manager.css @@ -10,7 +10,7 @@ position: fixed; overflow: hidden; width: 100%; - z-index: 2000; + z-index: 99; /*needs to be below dialog modal*/ /*override comfy-modal settings*/ border-radius: 0; diff --git a/web/model-manager.js b/web/model-manager.js index 195f596..2913314 100644 --- a/web/model-manager.js +++ b/web/model-manager.js @@ -15,9 +15,16 @@ function clamp(x, min, max) { function comfyRequest(url, options = undefined) { return new Promise((resolve, reject) => { api.fetchApi(url, options) - .then((response) => response.json()) - .then(resolve) - .catch(reject); + .then((response) => { + if (!response.ok) { + reject(new Error(`HTTP error ${response.status}: ${response.statusText}`)); + } else { + response.json() + .then(resolve) + .catch(error => reject(new Error(`Failed to parse JSON: ${error.message}`))); + } + }) + .catch(error => reject(new Error(`Request error: ${error.message}`))); }); } @@ -147,13 +154,35 @@ async function tryOpenModelUrl(modelSearchPath) { const encodedPath = encodeURIComponent(modelSearchPath); const requestUrl = `/model-manager/model/info/web-url?path=${encodedPath}`; const webUrlResponse = await comfyRequest(requestUrl); + let modelUrl; try { - const modelUrl = new URL(webUrlResponse["url"]); - window.open(modelUrl, '_blank').focus(); + modelUrl = new URL(webUrlResponse["url"]); } catch (exception) { return false; } + try { + window.open(modelUrl, '_blank').focus(); + } + catch (exception) { + // browser or ad-blocker blocking opening new window + app.ui.dialog.show($el("span", + [ + $el("p", { + style: { color: "var(--input-text)" }, + }, [modelSearchPath]), + $el("a", { + href: modelUrl, + target: "_blank", + }, [ + $el("span", [ + modelUrl, + $el("i.mdi.mdi-open-in-new"), + ]) + ]), + ] + )); + } return true; }