Merge branch 'master' of github.com:mahuntington/timer

master
Matt Huntington 4 years ago
commit da17caa2da

1
.gitignore vendored

@ -0,0 +1 @@
*.swp

118
app.js

@ -27,72 +27,84 @@ let windowInterval;
const previousSessionAccumulatedSeconds = parseInt(window.localStorage.getItem('savedPreviousSeconds')); const previousSessionAccumulatedSeconds = parseInt(window.localStorage.getItem('savedPreviousSeconds'));
if(previousSessionAccumulatedSeconds){ if(previousSessionAccumulatedSeconds){
savedPreviousSeconds = previousSessionAccumulatedSeconds savedPreviousSeconds = previousSessionAccumulatedSeconds
} }
const padDigits = (value) => { const padDigits = (value) => {
if(value < 10){ if(value < 10){
return '0'+value; return '0'+value;
} else { } else {
return value; return value;
} }
} }
const getMinutes = (seconds) => { const getMinutes = (seconds) => {
return Math.floor( seconds / 60 ); return Math.floor( seconds / 60 );
} }
const formatSeconds = (total) => { const formatSeconds = (total) => {
const minutes = getMinutes(total); const minutes = getMinutes(total);
const seconds = total - minutes*60; const seconds = total - minutes*60;
return `${minutes}:${padDigits(seconds)}`; return `${minutes}:${padDigits(seconds)}`;
} }
const formatMinuteBlocks = (seconds) => { const formatMinuteBlocks = (seconds) => {
const minutes = getMinutes(seconds); const minutes = getMinutes(seconds);
const fiveMins = Math.floor(minutes/5); const fiveMins = Math.floor(minutes/5);
const tenMins = Math.floor(minutes/10); const tenMins = Math.floor(minutes/10);
return `5 minute blocks: ${fiveMins}<br/> 10 minute blocks: ${tenMins}`; return `seconds: ${seconds}<br/> 5 minute blocks: ${fiveMins}<br/> 10 minute blocks: ${tenMins}`;
} }
const getAccumulatedSeconds = (newerTime, olderTime) => { const getAccumulatedSeconds = (newerTime, olderTime) => {
return Math.floor((newerTime-olderTime)/1000); return Math.floor((newerTime-olderTime)/1000);
} }
const displayTime = () => { const displayTime = () => {
const totalSeconds = getAccumulatedSeconds(Date.now(),startTime) + savedPreviousSeconds; const totalSeconds = getAccumulatedSeconds(Date.now(),startTime) + savedPreviousSeconds;
document.querySelector('code').innerHTML = formatSeconds(totalSeconds); document.querySelector('code').innerHTML = formatSeconds(totalSeconds);
document.querySelector('small').innerHTML = formatMinuteBlocks(totalSeconds); document.querySelector('small').innerHTML = formatMinuteBlocks(totalSeconds);
} }
const start = (event) => { const start = (event) => {
startTime = Date.now(); startTime = Date.now();
running = true; running = true;
document.querySelector('body').classList.add('running'); document.querySelector('body').classList.add('running');
document.querySelector('#start').disabled=true; document.querySelector('#start').disabled=true;
document.querySelector('#stop').disabled=false; document.querySelector('#stop').disabled=false;
document.querySelector('#reset').disabled=true; document.querySelector('#reset').disabled=true;
windowInterval = window.setInterval(displayTime,1000) windowInterval = window.setInterval(displayTime,1000)
}; };
const stop = (event) => { const stop = (event) => {
updateSavedPreviousSeconds(); updateSavedPreviousSeconds();
running = false; running = false;
document.querySelector('body').classList.remove('running'); document.querySelector('body').classList.remove('running');
document.querySelector('#start').disabled=false; document.querySelector('#start').disabled=false;
document.querySelector('#stop').disabled=true; document.querySelector('#stop').disabled=true;
document.querySelector('#reset').disabled=false; document.querySelector('#reset').disabled=false;
window.clearInterval(windowInterval) window.clearInterval(windowInterval)
}; };
const updateSavedPreviousSeconds = () => { const updateSavedPreviousSeconds = () => {
savedPreviousSeconds += getAccumulatedSeconds(Date.now(), startTime); savedPreviousSeconds += getAccumulatedSeconds(Date.now(), startTime);
}
const postToAPI = ()=>{
if(savedPreviousSeconds > 0){
fetch('https://shrouded-depths-07664.herokuapp.com/api/sessions',{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({seconds:savedPreviousSeconds})
});
}
} }
document.querySelector('code').innerHTML = formatSeconds(savedPreviousSeconds); document.querySelector('code').innerHTML = formatSeconds(savedPreviousSeconds);
document.querySelector('small').innerHTML = formatMinuteBlocks(savedPreviousSeconds); document.querySelector('small').innerHTML = formatMinuteBlocks(savedPreviousSeconds);
if(savedPreviousSeconds !== 0){ if(savedPreviousSeconds !== 0){
document.querySelector('#reset').disabled=false; document.querySelector('#reset').disabled=false;
} }
document.querySelector('#start').addEventListener('click', start) document.querySelector('#start').addEventListener('click', start)
@ -100,28 +112,30 @@ document.querySelector('#start').addEventListener('click', start)
document.querySelector('#stop').addEventListener('click', stop) document.querySelector('#stop').addEventListener('click', stop)
document.querySelector('#reset').addEventListener('click', (event) => { document.querySelector('#reset').addEventListener('click', (event) => {
savedPreviousSeconds = 0; postToAPI();
document.querySelector('code').innerHTML = formatSeconds(savedPreviousSeconds); savedPreviousSeconds = 0;
document.querySelector('small').innerHTML = formatMinuteBlocks(savedPreviousSeconds); document.querySelector('code').innerHTML = formatSeconds(savedPreviousSeconds);
document.querySelector('#reset').disabled=true; document.querySelector('small').innerHTML = formatMinuteBlocks(savedPreviousSeconds);
document.querySelector('#reset').disabled=true;
}) })
document.querySelector('body').addEventListener('keyup', (event) => { document.querySelector('body').addEventListener('keyup', (event) => {
if(event.keyCode === 32){ if(event.keyCode === 32){
if(running){ if(running){
stop(); stop();
} else { } else {
start(); start();
} }
} }
}) })
window.onbeforeunload = function(){ window.onbeforeunload = function(){
if(running){ if(running){
updateSavedPreviousSeconds(); updateSavedPreviousSeconds();
} }
window.localStorage.setItem('savedPreviousSeconds', savedPreviousSeconds); window.localStorage.setItem('savedPreviousSeconds', savedPreviousSeconds);
if(savedPreviousSeconds > 0){ if(savedPreviousSeconds > 0){
return 'Good bye'; postToAPI();
} return 'Good bye';
}
} }

Loading…
Cancel
Save