// Name: ⌛ Presentation Timer import '@johnlindquist/kit'; import parse from 'parse-duration'; let timer = await arg( 'Enter duration for timer (e.g. 3 [minutes], 90s, 15m30s)', ); if (/^\d+$/.test(timer)) { timer += 'm'; } let parsedMs = parse(timer); let COUNTDOWN_ID = 'the-final-countdown'; let js = ` (() => { let countdownMs = ${parsedMs} + 2000; // 2000ms buffer for script to start let iframeElement = document.querySelector('iframe.punch-present-iframe'); let existingCountdown = document.getElementById('${COUNTDOWN_ID}'); if (existingCountdown) { existingCountdown.parentNode.removeChild(existingCountdown); } if (iframeElement) { let existingCountdownInIframe = iframeElement.contentDocument.getElementById('${COUNTDOWN_ID}'); if (existingCountdownInIframe) { existingCountdownInIframe.parentNode.removeChild(existingCountdownInIframe); } } let countdownElement = document.createElement('div'); countdownElement.id = '${COUNTDOWN_ID}'; if (iframeElement) { iframeElement.contentDocument.body.appendChild(countdownElement); } else { document.body.appendChild(countdownElement); } countdownElement.style.fontSize = '2em'; countdownElement.style.fontFamily = 'monospace'; countdownElement.style.color = 'white'; countdownElement.style.textShadow = '1px 1px 1px black'; countdownElement.style.position = 'absolute'; countdownElement.style.top = '0'; countdownElement.style.right = '0'; countdownElement.style.padding = '10px'; countdownElement.style.zIndex = '999999999'; // Set the date we're counting down to let countDownDate = new Date().getTime() + countdownMs; if (countdownMs > 0) { let countdownInterval = setInterval(function () { let now = new Date().getTime(); let distance = countDownDate - now; let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); let minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); let seconds = Math.floor((distance % (1000 * 60)) / 1000); if (distance > 0) { if (distance <= 60000) { // If below 1 minute, change text to red countdownElement.style.color = 'red'; } let countdownText = ''; if (hours > 0) { countdownText += (hours < 10 ? '0' : '') + hours + ':'; } countdownText += (minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds; countdownElement.textContent = countdownText; } else { clearInterval(countdownInterval); countdownElement.textContent = 'TIME IS UP!'; } }, 1000); } })(); `; await applescript(` tell application "Google Chrome" to tell window 1 get execute active tab javascript " ${js} " end tell `);