diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 7a1349680..9ae08462f 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -1,34 +1,46 @@ class Chronometer { constructor() { - // ... your code goes here + this.currentTime = 0; + this.intervalId = null; } start(callback) { - // ... your code goes here + this.intervalId = setInterval(() => { + this.currentTime += 1; + if (callback) callback(); + }, 10); } getMinutes() { - // ... your code goes here + return Math.floor(this.currentTime / 6000); } getSeconds() { - // ... your code goes here + return Math.floor((this.currentTime % 6000) / 100); + } + + getMilliseconds() { + return this.currentTime % 100; } computeTwoDigitNumber(value) { - // ... your code goes here + return value < 10 ? '0' + value : value.toString(); } stop() { - // ... your code goes here + clearInterval(this.intervalId) } reset() { - // ... your code goes here + this.currentTime = 0; } split() { - // ... your code goes here + let min = this.computeTwoDigitNumber(this.getMinutes()); + let sec = this.computeTwoDigitNumber(this.getSeconds()); + let ms = this.computeTwoDigitNumber(this.getMilliseconds()); + + return `${min}:${sec}.${ms}`; } } diff --git a/javascript/index.js b/javascript/index.js index fb3a43ab4..9eb87b313 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -14,52 +14,84 @@ const milUniElement = document.getElementById('milUni'); const splitsElement = document.getElementById('splits'); function printTime() { - // ... your code goes here + printMinutes(); + printSeconds(); + printMilliseconds(); } function printMinutes() { - // ... your code goes here + let minutes = chronometer.computeTwoDigitNumber(chronometer.getMinutes()); + minDecElement.textContent = minutes[0]; + minUniElement.textContent = minutes[1]; } function printSeconds() { - // ... your code goes here + let seconds = chronometer.computeTwoDigitNumber(chronometer.getSeconds()); + secDecElement.textContent = seconds[0]; + secUniElement.textContent = seconds[1]; } // ==> BONUS function printMilliseconds() { - // ... your code goes here + let ms = chronometer.computeTwoDigitNumber(chronometer.getMilliseconds()); + milDecElement.textContent = ms[0]; + milUniElement.textContent = ms[1]; } function printSplit() { - // ... your code goes here + let li = document.createElement('li'); + li.textContent = chronometer.split(); + splitsElement.appendChild(li); } function clearSplits() { - // ... your code goes here + splitsElement.innerHTML = ''; } function setStopBtn() { - // ... your code goes here + btnLeftElement.textContent = 'STOP'; + btnLeftElement.classList.remove('start'); + btnLeftElement.classList.add('stop'); } function setSplitBtn() { - // ... your code goes here + btnRightElement.textContent = 'SPLIT'; + btnRightElement.classList.remove('reset'); + btnRightElement.classList.add('split'); } function setStartBtn() { - // ... your code goes here + btnLeftElement.textContent = 'START'; + btnLeftElement.classList.remove('stop'); + btnLeftElement.classList.add('start'); } function setResetBtn() { - // ... your code goes here + btnRightElement.textContent = 'RESET'; + btnRightElement.classList.remove('split'); + btnRightElement.classList.add('reset') } // Start/Stop Button btnLeftElement.addEventListener('click', () => { - // ... your code goes here + if (btnLeftElement.classList.contains('start')) { + chronometer.start(printTime); + setStopBtn(); + setSplitBtn(); + } else { + chronometer.stop(); + setStartBtn(); + setResetBtn(); + } }); // Reset/Split Button btnRightElement.addEventListener('click', () => { - // ... your code goes here + if (btnRightElement.classList.contains('reset')) { + chronometer.reset(); + printTime(); + clearSplits(); + } else { + printSplit(); + } });