| |
|
| |
|
| | function isImgUrl(url) { |
| | const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp)$/i; |
| | if (url.startsWith('data:image/')) { |
| | return true; |
| | } |
| | if (url.match(imageExtensions)) { |
| | return true; |
| | } |
| | if (url.startsWith('http://') || url.startsWith('https://')) { |
| | return true; |
| | } |
| |
|
| | return false; |
| | } |
| |
|
| | function downloadHistory(gradioUsername, historyname, format=".json") { |
| | let fileUrl; |
| | if (gradioUsername === null || gradioUsername.trim() === "") { |
| | fileUrl = `/file=./history/${historyname}`; |
| | } else { |
| | fileUrl = `/file=./history/${gradioUsername}/${historyname}`; |
| | } |
| | downloadFile(fileUrl, historyname, format); |
| | } |
| |
|
| | function downloadFile(fileUrl, filename = "", format = "", retryTimeout = 200, maxAttempts = 10) { |
| |
|
| | fileUrl = fileUrl + format; |
| | filename = filename + format; |
| |
|
| | let attempts = 0; |
| |
|
| | async function tryDownload() { |
| | if (attempts >= maxAttempts) { |
| | console.error('Max attempts reached, download failed.'); |
| | alert('Download failed:' + filename); |
| | return; |
| | } |
| | try { |
| | const response = await fetch(fileUrl); |
| | if (!response.ok) { |
| | attempts++; |
| | console.error("Error fetching file, retrying..."); |
| | setTimeout(tryDownload, retryTimeout); |
| | } else { |
| | response.blob() |
| | .then(blob => { |
| | const url = URL.createObjectURL(blob); |
| | const a = document.createElement('a'); |
| | a.style.display = 'none'; |
| | a.href = url; |
| | a.download = filename; |
| | document.body.appendChild(a); |
| | a.click(); |
| | URL.revokeObjectURL(url); |
| | document.body.removeChild(a); |
| | }) |
| | .catch(error => { |
| | console.error('Error downloading file:', error); |
| | }); |
| | } |
| | } catch (error) { |
| | attempts++; |
| | setTimeout(tryDownload, retryTimeout); |
| | } |
| | } |
| |
|
| | tryDownload(); |
| | } |
| | |
| | function statusDisplayMessage(message) { |
| | statusDisplayBlock = statusDisplay.querySelector("#status-display .md p"); |
| | statusDisplayBlock.innerText = message; |
| | } |
| |
|
| | function bindFancyBox() { |
| | Fancybox.bind('[data-fancybox]', { |
| | Carousel: { |
| | Panzoom: { |
| | decelFriction: 0.5 |
| | } |
| | } |
| | }); |
| | } |
| |
|
| | function rebootingChuanhu() { |
| | reloadSpinner = new Spin.Spinner({color:'#06AE56',lines:9}).spin(); |
| | pageInfo = document.createElement('div'); |
| | pageInfo.appendChild(reloadSpinner.el); |
| | pageInfo.innerHTML += '<h1 style="position: absolute; left: 50%; top: 50%; transform: translateX(-50%); color: lightgray; text-align: center; font-family: sans-serif;">Rebooting...</h1>' |
| | document.body.innerHTML = ''; |
| | document.body.appendChild(pageInfo); |
| | } |
| |
|
| | |
| | |
| | |
| | function restart_reload() { |
| | document.body.innerHTML = '<h1 style="font-family:ui-monospace,monospace;margin-top:20%;color:lightgray;text-align:center;">Reloading...</h1>'; |
| |
|
| | var requestPing = function () { |
| | requestGet("./internal/ping", {}, function (data) { |
| | location.reload(); |
| | }, function () { |
| | setTimeout(requestPing, 500); |
| | }); |
| | }; |
| |
|
| | setTimeout(requestPing, 2000); |
| |
|
| | return []; |
| | } |
| |
|
| | function requestGet(url, data, handler, errorHandler) { |
| | var xhr = new XMLHttpRequest(); |
| | var args = Object.keys(data).map(function (k) { |
| | return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]); |
| | }).join('&'); |
| | xhr.open("GET", url + "?" + args, true); |
| |
|
| | xhr.onreadystatechange = function () { |
| | if (xhr.readyState === 4) { |
| | if (xhr.status === 200) { |
| | try { |
| | var js = JSON.parse(xhr.responseText); |
| | handler(js); |
| | } catch (error) { |
| | console.error(error); |
| | errorHandler(); |
| | } |
| | } else { |
| | errorHandler(); |
| | } |
| | } |
| | }; |
| | var js = JSON.stringify(data); |
| | xhr.send(js); |
| | } |
| |
|