Injects a countdown into an active webpage. Supports any webpage as well as google slideshow.
Open presentation-timer in Script Kit
// Name: ⌛ Presentation Timerimport '@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 startlet 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 tolet 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 redcountdownElement.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 1get execute active tab javascript "${js}"end tell`);