| | let startTime; |
| | let timeout; |
| | let myHeaders = new Headers(); |
| | myHeaders.append("Bypass-Tunnel-Reminder", "Thanks for checking my code lol") |
| | myHeaders.append("ngrok-skip-browser-warning", "Seriously tho, thank you so much!") |
| |
|
| | function updateTimer(el) { |
| | const a = (i) => (i < 10 ? "0" + i : i); |
| | const b = (x) => Math.floor(x); |
| | let c = b(Date.now() / 1000) - startTime; |
| | h = a(b(c / 3600)); |
| | m = a(b((c / 60) % 60)); |
| | s = a(b(c % 60)); |
| | |
| |
|
| | |
| | if (c > 298 && c < 315) { |
| | el.innerText = |
| | "Usually there's captcha at this time, please check your colab (" + |
| | h + |
| | ":" + |
| | m + |
| | ":" + |
| | s + |
| | ")"; |
| | } else { |
| | el.innerText = h + ":" + m + ":" + s; |
| | } |
| |
|
| | |
| | if (c % 30 == 0) { |
| | refreshTimer(el, true); |
| | return; |
| | } |
| |
|
| | timeout = setTimeout(() => updateTimer(el), 1000); |
| | } |
| |
|
| | refreshTimer = (timerEl, notext = false) => { |
| | if (timeout) { |
| | clearTimeout(timeout); |
| | timeout = null; |
| | } |
| | if (!notext) timerEl.innerText = "Connecting..."; |
| | fetch("file=static/colabTimer.txt", { cache: "no-store", headers: myHeaders }) |
| | .then((response) => { |
| | if (response.status == 404) { |
| | timerEl.innerText = "Error. Colab disconnected!"; |
| | return; |
| | } |
| | response.text().then((text) => { |
| | startTime = parseInt(text); |
| | if (isNaN(startTime)) |
| | timerEl.innerText = "Error. NaN stuff... Maybe network error"; |
| | else updateTimer(timerEl); |
| | }); |
| | }) |
| | .catch((err) => { |
| | console.log(err); |
| | timerEl.innerText = "Error. "+err; |
| | }); |
| | }; |
| |
|
| | toggleNotification = (imgEl, audioEl, divEl) => { |
| | audioEl.muted = !audioEl.muted |
| | audioEl.currentTime = 0; |
| | audioEl.play(); |
| | divEl.title = !audioEl.muted ? "Currently not-muted. Click to mute" : "Currently muted. Click to unmute"; |
| | divEl.style.borderColor = |
| | !audioEl.muted |
| | ? "#00ff00" |
| | : "#ff0000"; |
| | imgEl.src = audioEl.muted ? "https://api.iconify.design/ion:md-notifications-off.svg?color=%23ff0000" : "https://api.iconify.design/ion:md-notifications.svg?color=%2300ff00"; |
| | } |
| |
|
| | onUiLoaded(function () { |
| | const quickSettings = gradioApp().querySelector("#quicksettings"); |
| | const audioEl = gradioApp().querySelector("#audio_notification > audio") |
| |
|
| | if (gradioApp().querySelector("#nocrypt-timer") != null) return; |
| |
|
| | let mainDiv = document.createElement("div"); |
| | mainDiv.id = "nocrypt-timer"; |
| | mainDiv.className = "justify-start"; |
| | mainDiv.style = "gap: 10px; user-select: none; margin-block: -10px; transform-origin: left center; scale: 0.8; display:flex;"; |
| |
|
| | let div2 = document.createElement("div"); |
| | div2.className = "gr-box"; |
| | div2.style = |
| | "gap: 0.5rem; border-radius:10px; display:flex;align-items:center;border-width:1px; display:flex; cursor: pointer; padding-block: 3px; width: fit-content; padding-inline: 5px; border-color: orange; z-index: 999; background-color: transparent !important;"; |
| | div2.title = "Colab Timer Integration by NoCrypt. Click to refresh."; |
| |
|
| | let img = document.createElement("img"); |
| | img.src = |
| | "https://ssl.gstatic.com/colaboratory-static/common/de56aa663d279b80074b6c21f69dc872/img/favicon.ico"; |
| | img.width = 24; |
| |
|
| | let timerEl = document.createElement("div"); |
| | timerEl.style = "font-family: monospace;color: orange;"; |
| | timerEl.innerText = "Connecting..."; |
| | div2.appendChild(img); |
| | div2.appendChild(timerEl); |
| | mainDiv.appendChild(div2); |
| | div2.onclick = () => refreshTimer(timerEl); |
| |
|
| | let div3 = document.createElement("div"); |
| | div3.className = "gr-box"; |
| | div3.style = |
| | "gap: 0.5rem; border-radius:10px; display:flex;align-items:center;border-width:1px; display:flex; cursor: pointer; padding-block: 3px; width: fit-content; padding-inline: 5px; border-color: lime; z-index: 999; background-color: transparent !important;"; |
| | div3.title = "Currently not-muted. Click to mute"; |
| |
|
| | let img2 = document.createElement("img"); |
| | img2.src = |
| | "https://api.iconify.design/ion:md-notifications.svg?color=%2300ff00"; |
| | img2.width = 20; |
| | div3.appendChild(img2); |
| | div3.onclick = () => toggleNotification(img2, audioEl, div3); |
| | mainDiv.appendChild(div3); |
| |
|
| | quickSettings.parentNode.insertBefore(mainDiv, quickSettings.nextSibling); |
| | refreshTimer(timerEl); |
| | }); |
| |
|