diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 7a1349680..32a60b2bb 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -1,34 +1,45 @@ class Chronometer { constructor() { - // ... your code goes here + this.currentTime = 0; + this.intervalId = null; } start(callback) { - // ... your code goes here + this.intervalId = setInterval(() => { + this.currentTime++; + if (callback) callback(); + }, 10); } getMinutes() { - // ... your code goes here + return Math.floor(this.currentTime / 60); } getSeconds() { - // ... your code goes here + return this.currentTime % 60; + } + + getMilliseconds() { + return this.currentTime % 100; } computeTwoDigitNumber(value) { - // ... your code goes here + return value < 10 ? '0' + value : String(value); } stop() { - // ... your code goes here + clearInterval(this.intervalId); } reset() { - // ... your code goes here + this.currentTime = 0; } split() { - // ... your code goes here + const minutes = this.computeTwoDigitNumber(this.getMinutes()); + const seconds = this.computeTwoDigitNumber(this.getSeconds()); + const milliseconds = this.computeTwoDigitNumber(this.getMilliseconds()); + return `${minutes}:${seconds}.${milliseconds}`; } } diff --git a/javascript/index.js b/javascript/index.js index fb3a43ab4..1a467fca2 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -14,52 +14,78 @@ 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 + const minutes = chronometer.computeTwoDigitNumber(chronometer.getMinutes()); + minDecElement.innerText = minutes[0]; + minUniElement.innerText = minutes[1]; } function printSeconds() { - // ... your code goes here + const seconds = chronometer.computeTwoDigitNumber(chronometer.getSeconds()); + secDecElement.innerText = seconds[0]; + secUniElement.innerText = seconds[1]; } -// ==> BONUS function printMilliseconds() { - // ... your code goes here + const milliseconds = chronometer.computeTwoDigitNumber(chronometer.getMilliseconds()); + milDecElement.innerText = milliseconds[0]; + milUniElement.innerText = milliseconds[1]; } function printSplit() { - // ... your code goes here -} - -function clearSplits() { - // ... your code goes here + const li = document.createElement('li'); + li.className = 'list-item'; + li.innerText = chronometer.split(); + splitsElement.appendChild(li); } function setStopBtn() { - // ... your code goes here + btnLeftElement.innerText = 'STOP'; + btnLeftElement.className = 'btn stop'; } function setSplitBtn() { - // ... your code goes here + btnRightElement.innerText = 'SPLIT'; + btnRightElement.className = 'btn split'; } function setStartBtn() { - // ... your code goes here + btnLeftElement.innerText = 'START'; + btnLeftElement.className = 'btn start'; } function setResetBtn() { - // ... your code goes here + btnRightElement.innerText = 'RESET'; + btnRightElement.className = 'btn reset'; } // Start/Stop Button btnLeftElement.addEventListener('click', () => { - // ... your code goes here + if (btnLeftElement.classList.contains('start')) { + // STOP/SPLIT + chronometer.start(printTime); + setStopBtn(); + setSplitBtn(); + } else { + // START/RESET + 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(); + } }); diff --git a/tests/chronometer.spec.js b/tests/chronometer.spec.js index 798db97a2..e9ff0f3f5 100755 --- a/tests/chronometer.spec.js +++ b/tests/chronometer.spec.js @@ -185,15 +185,15 @@ describe('Chronometer', () => { // If you decide to work on the bonus iteration, // comment the previous test and uncomment the following - // it('should return valid format with minutes, seconds and milliseconds', () => { - // let min = chronometer.getMinutes(); - // let sec = chronometer.getSeconds(); - // let milli = chronometer.getMilliseconds(); - // if (min < 10) { - // expect(chronometer.split()).toEqual(`0${min}:0${sec}:0${milli}`); - // } else { - // expect(chronometer.split()).toEqual(`${min}:${sec}:${milli}`); - // } - // }); + it('should return valid format with minutes, seconds and milliseconds', () => { + let min = chronometer.getMinutes(); + let sec = chronometer.getSeconds(); + let milli = chronometer.getMilliseconds(); + if (min < 10) { + expect(chronometer.split()).toEqual(`0${min}:0${sec}:0${milli}`); + } else { + expect(chronometer.split()).toEqual(`${min}:${sec}:${milli}`); + } + }); }); });