Horrid timer
Created
July 11, 2018 03:55
-
-
Save bishoplee/4a1736090cec15eb4ee5e37fa58c2789 to your computer and use it in GitHub Desktop.
Pomodoro Clock
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class='wrapper'> | |
<div class='align-wrap'> | |
<div class='align'> | |
<div class='group'> | |
<div class='left'> | |
<h3 class='break'>break</h3> | |
<h2><a id='breakMinus' href="#">-</a><span id='breakMinutes'></span><a id='breakPlus' href="#">+</a></h2> | |
</div> | |
<div class='right'> | |
<h3 class='session'>session</h3> | |
<h2><a id='sessionMinus' href="#">-</a><span id='sessionMinutes'></span><a id='sessionPlus' href="#">+</a></h2> | |
</div> | |
</div> | |
<div class='clock'> | |
<h1 class='timer' id='timer'></h1> | |
<button class='button' id='start'>start</button> | |
<button class='button left' id='pause'>pause</button> | |
<button class='button right' id='reset'>reset</button> | |
<button class='button' id='startBreak'>start</button> | |
<button class='button left' id='pauseBreak'>pause</button> | |
<button class='button right' id='resetBreak'>reset</button> | |
</div> | |
</div> | |
</div> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var countdown; | |
var delay = 1000; | |
var session = 25; | |
var rest = 5; | |
var sessionSeconds = session * 60; | |
var restSeconds = rest * 60; | |
var audioSession = new Audio('http://www.oringz.com/oringz-uploads/sounds-948-just-like-magic.mp3'); | |
var audioBreak = new Audio('http://www.oringz.com/oringz-uploads/sounds-882-solemn.mp3'); | |
var sessionMinutes = document.getElementById('sessionMinutes'), | |
sessionMinus = document.getElementById('sessionMinus'), | |
sessionPlus = document.getElementById('sessionPlus'), | |
breakMinutes = document.getElementById('breakMinutes'), | |
breakMinus = document.getElementById('breakMinus'), | |
breakPlus = document.getElementById('breakPlus'), | |
timer = document.getElementById('timer'), | |
startSessionButton = document.getElementById('start'), | |
pauseSessionButton = document.getElementById('pause'), | |
resetSessionButton = document.getElementById('reset'), | |
startBreakButton = document.getElementById('startBreak'), | |
pauseBreakButton = document.getElementById('pauseBreak'), | |
resetBreakButton = document.getElementById('resetBreak'); | |
sessionMinutes.innerHTML = ' ' + session + ' '; | |
breakMinutes.innerHTML = ' ' + rest + ' '; | |
timer.innerHTML = session + ':00'; | |
displaySession('', 'none', 'none'); | |
displayBreak('none', 'none', 'none'); | |
function startCountdown(seconds) { | |
var minutes = parseInt(seconds / 60); | |
var remainingSeconds = seconds % 60; | |
if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; | |
timer.innerHTML = minutes + ':' + remainingSeconds; | |
} | |
function startSession() { | |
audioSession.play(); | |
timer.innerHTML = 'session'; | |
clearInterval(countdown); | |
countdown = setInterval(function() { | |
startCountdown(sessionSeconds); | |
if (sessionSeconds === 0) { | |
clearInterval(countdown); | |
restSeconds = rest * 60; | |
displaySession('none', 'none', 'none'); | |
startBreak(); | |
} else sessionSeconds--; | |
}, delay); | |
displaySession('none', '', ''); | |
} | |
function startBreak() { | |
audioBreak.play(); | |
timer.innerHTML = 'break'; | |
clearInterval(countdown); | |
countdown = setInterval(function() { | |
startCountdown(restSeconds); | |
if (restSeconds === 0) { | |
clearInterval(countdown); | |
sessionSeconds = session * 60; | |
displayBreak('none', 'none', 'none'); | |
startSession(); | |
} else restSeconds--; | |
}, delay); | |
displayBreak('none', '', ''); | |
} | |
function pauseSession() { | |
clearInterval(countdown); | |
displaySession('', 'none', 'none'); | |
startSessionButton.innerHTML = 'resume'; | |
} | |
function pauseBreak() { | |
clearInterval(countdown); | |
displayBreak('', 'none', 'none'); | |
startBreakButton.innerHTML = 'resume'; | |
} | |
function resetSession() { | |
pauseSession(); | |
sessionSeconds = session * 60; | |
timer.innerHTML = session + ':00'; | |
startSessionButton.innerHTML = 'start'; | |
} | |
function resetBreak() { | |
pauseBreak(); | |
restSeconds = rest * 60; | |
timer.innerHTML = rest + ':00'; | |
startBreakButton.innerHTML = 'start'; | |
} | |
function subtractSession() { | |
session--; | |
if (session < 0) session = 0; | |
sessionSeconds = session * 60; | |
sessionMinutes.innerHTML = ' ' + session + ' '; | |
} | |
function subtractBreak() { | |
rest--; | |
if (rest < 0) rest = 0; | |
restSeconds = rest * 60; | |
breakMinutes.innerHTML = ' ' + rest + ' '; | |
} | |
function addSession() { | |
session++; | |
sessionSeconds = session * 60; | |
sessionMinutes.innerHTML = ' ' + session + ' '; | |
} | |
function addBreak() { | |
rest++; | |
restSeconds = rest * 60; | |
breakMinutes.innerHTML = ' ' + rest + ' '; | |
} | |
function displaySession(start, pause, reset) { | |
startSessionButton.style.display = start; | |
pauseSessionButton.style.display = pause; | |
resetSessionButton.style.display = reset; | |
} | |
function displayBreak(start, pause, reset) { | |
startBreakButton.style.display = start; | |
pauseBreakButton.style.display = pause; | |
resetBreakButton.style.display = reset; | |
} | |
sessionMinus.addEventListener('click', subtractSession); | |
sessionPlus.addEventListener('click', addSession); | |
breakMinus.addEventListener('click', subtractBreak); | |
breakPlus.addEventListener('click', addBreak); | |
startSessionButton.addEventListener('click', startSession); | |
pauseSessionButton.addEventListener('click', pauseSession); | |
resetSessionButton.addEventListener('click', resetSession); | |
startBreakButton.addEventListener('click', startBreak); | |
pauseBreakButton.addEventListener('click', pauseBreak); | |
resetBreakButton.addEventListener('click', resetBreak); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@import url('https://fonts.googleapis.com/css?family=Lato:300,400'); | |
body { | |
background: #F44336; | |
padding: 0; | |
margin: 0; | |
} | |
h1, | |
h2, | |
h3 { | |
color: white; | |
font-family: 'Lato'; | |
font-weight: 300; | |
line-height: 1.1; | |
letter-spacing: 0.025em; | |
text-transform: uppercase; | |
padding: 0; | |
margin: 0; | |
} | |
a { | |
color: white; | |
text-decoration: none; | |
opacity: 0.7; | |
} | |
a:hover { | |
opacity: 1; | |
} | |
.wrapper { | |
margin: 0 auto; | |
width: 300px; | |
height: 100vh; | |
} | |
.align-wrap { | |
width: 100%; | |
height: 100%; | |
display: table; | |
} | |
.align { | |
display: table-cell; | |
vertical-align: middle; | |
text-align: center; | |
} | |
.group { | |
height: 55px; | |
} | |
.left { | |
float: left; | |
} | |
.right { | |
float: right; | |
} | |
.clock { | |
width: 300px; | |
height: 300px; | |
vertical-align: middle; | |
display: table-cell; | |
} | |
.timer { | |
padding: 110px 0; | |
font-weight: 400; | |
font-size: 4em; | |
} | |
.button { | |
width: 100px; | |
height: 45px; | |
border: solid thin white; | |
text-transform: uppercase; | |
background: transparent; | |
color: white; | |
} | |
.button:hover { | |
background: white; | |
color: #F44336; | |
} | |
.button:focus { | |
outline: none; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment