From c1a6730622f5f8d7d55df2d1732dd3923d21fa77 Mon Sep 17 00:00:00 2001 From: Nazaret Date: Tue, 26 Aug 2025 13:13:09 +0200 Subject: [PATCH 1/5] Iterations done --- javascript/chronometer.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 7a13496..139e5ab 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 += 1; + if (callback) callback(); + }, 1000); } getMinutes() { - // ... your code goes here + return Math.floor(this.currentTime / 60); } getSeconds() { - // ... your code goes here + return Math.floor(this.currentTime % 60); } computeTwoDigitNumber(value) { - // ... your code goes here + let number = String(value); + + if (number.length === 1) { + return number.padStart(2, '0'); + } + return number } stop() { - // ... your code goes here + clearInterval(this.intervalId) } reset() { - // ... your code goes here + this.currentTime = 0 } split() { - // ... your code goes here + let mins = this.computeTwoDigitNumber(this.getMinutes()) + let secs = this.computeTwoDigitNumber(this.getSeconds()) + return `${mins}:${secs}` } } From eae748b3973aeb5a49f7896b660dbf411e6d1279 Mon Sep 17 00:00:00 2001 From: Nazaret Date: Tue, 26 Aug 2025 17:34:37 +0200 Subject: [PATCH 2/5] Start/stop button --- index.html | 4 ++-- javascript/chronometer.js | 20 ++++++++++++-------- javascript/index.js | 28 +++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 3415d73..1138298 100644 --- a/index.html +++ b/index.html @@ -37,7 +37,7 @@

Splits

- - + + diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 139e5ab..94fad91 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -1,15 +1,18 @@ -class Chronometer { +export class Chronometer { constructor() { this.currentTime = 0; this.intervalId = null; } start(callback) { - this.intervalId = setInterval(() => { - this.currentTime += 1; - if (callback) callback(); - }, 1000); - } + // si ya hay un intervalo activo, no arrancar otro + if (this.intervalId) return; + + this.intervalId = setInterval(() => { + this.currentTime += 1; + if (callback) callback(); // ejecutar el callback si existe + }, 1000); +} getMinutes() { return Math.floor(this.currentTime / 60); @@ -29,8 +32,9 @@ class Chronometer { } stop() { - clearInterval(this.intervalId) - } + clearInterval(this.intervalId); // parar el intervalo + this.intervalId = null; // reiniciar la referencia +} reset() { this.currentTime = 0 diff --git a/javascript/index.js b/javascript/index.js index fb3a43a..492284a 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -1,3 +1,5 @@ +import { Chronometer } from './chronometer.js'; + const chronometer = new Chronometer(); // get the buttons: @@ -56,8 +58,32 @@ function setResetBtn() { // Start/Stop Button btnLeftElement.addEventListener('click', () => { - // ... your code goes here + if (btnLeftElement.classList.contains('start')) { + btnLeftElement.innerText = 'STOP'; + btnLeftElement.classList.replace('start', 'stop'); + + btnRightElement.innerText = 'SPLIT'; + btnRightElement.classList.replace('reset', 'split'); + + chronometer.start(() => { + let minutes = chronometer.computeTwoDigitNumber(chronometer.getMinutes()); + let seconds = chronometer.computeTwoDigitNumber(chronometer.getSeconds()); + + minDecElement.innerHTML = minutes[0]; + minUniElement.innerHTML = minutes[1]; + secDecElement.innerHTML = seconds[0]; + secUniElement.innerHTML = seconds[1]; + }); + } else { + chronometer.stop(); + btnLeftElement.innerText = 'START'; + btnLeftElement.classList.replace('stop', 'start'); + + btnRightElement.innerText = 'RESET'; + btnRightElement.classList.replace('split', 'reset'); + } }); +console.log(minDec, minUni, secDec, secUni); // Reset/Split Button btnRightElement.addEventListener('click', () => { From d0bf968c7d27e66dcc3446046a3ee9e99e09114b Mon Sep 17 00:00:00 2001 From: Nazaret Date: Thu, 28 Aug 2025 18:26:28 +0200 Subject: [PATCH 3/5] Pre test --- javascript/chronometer.js | 16 +++++++++++----- javascript/index.js | 23 +++++++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 94fad91..2eadb94 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -1,4 +1,4 @@ -export class Chronometer { +class Chronometer { constructor() { this.currentTime = 0; this.intervalId = null; @@ -11,17 +11,22 @@ export class Chronometer { this.intervalId = setInterval(() => { this.currentTime += 1; if (callback) callback(); // ejecutar el callback si existe - }, 1000); + }, 10); } getMinutes() { - return Math.floor(this.currentTime / 60); + return Math.floor((this.currentTime / 100) / 60); } getSeconds() { - return Math.floor(this.currentTime % 60); + return Math.floor(this.currentTime / 100) % 60; } + getMilliseconds() { + return this.currentTime % 100; +} + + computeTwoDigitNumber(value) { let number = String(value); @@ -43,7 +48,8 @@ export class Chronometer { split() { let mins = this.computeTwoDigitNumber(this.getMinutes()) let secs = this.computeTwoDigitNumber(this.getSeconds()) - return `${mins}:${secs}` + let mills = this.computeTwoDigitNumber(this.getMilliseconds()) + return `${mins}:${secs}.${mills}` } } diff --git a/javascript/index.js b/javascript/index.js index 492284a..7234873 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -68,11 +68,16 @@ btnLeftElement.addEventListener('click', () => { chronometer.start(() => { let minutes = chronometer.computeTwoDigitNumber(chronometer.getMinutes()); let seconds = chronometer.computeTwoDigitNumber(chronometer.getSeconds()); + let milliseconds = chronometer.computeTwoDigitNumber( + chronometer.getMilliseconds() + ); minDecElement.innerHTML = minutes[0]; minUniElement.innerHTML = minutes[1]; secDecElement.innerHTML = seconds[0]; secUniElement.innerHTML = seconds[1]; + milDecElement.textContent = milliseconds[0]; + milUniElement.textContent = milliseconds[1]; }); } else { chronometer.stop(); @@ -83,9 +88,23 @@ btnLeftElement.addEventListener('click', () => { btnRightElement.classList.replace('split', 'reset'); } }); -console.log(minDec, minUni, secDec, secUni); // Reset/Split Button btnRightElement.addEventListener('click', () => { - // ... your code goes here + const li = document.createElement('li'); + li.className = 'list-item'; + li.textContent = chronometer.split(); + splitsElement.appendChild(li); + + if (btnRightElement.classList.contains('reset')) { + chronometer.reset(); + minDecElement.textContent = '0'; + minUniElement.textContent = '0'; + secDecElement.textContent = '0'; + secUniElement.textContent = '0'; + milDecElement.textContent = '0'; + milUniElement.textContent = '0'; + + splitsElement.innerHTML = ''; + } }); From 234b3fadae2c2cccc8ee88230766b582e9524275 Mon Sep 17 00:00:00 2001 From: Nazaret Date: Thu, 4 Sep 2025 13:36:31 +0200 Subject: [PATCH 4/5] tests done --- javascript/chronometer.js | 40 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/javascript/chronometer.js b/javascript/chronometer.js index 2eadb94..c75b4a3 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -5,27 +5,26 @@ class Chronometer { } start(callback) { - // si ya hay un intervalo activo, no arrancar otro - if (this.intervalId) return; + // si ya hay un intervalo activo, no arrancar otro + if (this.intervalId) return; - this.intervalId = setInterval(() => { - this.currentTime += 1; - if (callback) callback(); // ejecutar el callback si existe - }, 10); -} + this.intervalId = setInterval(() => { + this.currentTime += 1; + if (callback) callback(); // ejecutar el callback si existe + }, 1000); + } getMinutes() { - return Math.floor((this.currentTime / 100) / 60); + return Math.floor(this.currentTime / 60); } getSeconds() { - return Math.floor(this.currentTime / 100) % 60; + return this.currentTime % 60; } getMilliseconds() { - return this.currentTime % 100; -} - + return this.currentTime % 100; + } computeTwoDigitNumber(value) { let number = String(value); @@ -33,23 +32,22 @@ class Chronometer { if (number.length === 1) { return number.padStart(2, '0'); } - return number + return number; } stop() { - clearInterval(this.intervalId); // parar el intervalo - this.intervalId = null; // reiniciar la referencia -} + clearInterval(this.intervalId); // parar el intervalo + this.intervalId = null; // reiniciar la referencia + } reset() { - this.currentTime = 0 + this.currentTime = 0; } split() { - let mins = this.computeTwoDigitNumber(this.getMinutes()) - let secs = this.computeTwoDigitNumber(this.getSeconds()) - let mills = this.computeTwoDigitNumber(this.getMilliseconds()) - return `${mins}:${secs}.${mills}` + let mins = this.computeTwoDigitNumber(this.getMinutes()); + let secs = this.computeTwoDigitNumber(this.getSeconds()); + return `${mins}:${secs}`; } } From 7e29da7f66416ab1d5ab99d684d44fa5d7fba7d3 Mon Sep 17 00:00:00 2001 From: Nazaret Date: Thu, 4 Sep 2025 13:39:06 +0200 Subject: [PATCH 5/5] solve iteration x, y, z --- javascript/chronometer.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/javascript/chronometer.js b/javascript/chronometer.js index c75b4a3..98d0172 100644 --- a/javascript/chronometer.js +++ b/javascript/chronometer.js @@ -5,12 +5,11 @@ class Chronometer { } start(callback) { - // si ya hay un intervalo activo, no arrancar otro if (this.intervalId) return; this.intervalId = setInterval(() => { this.currentTime += 1; - if (callback) callback(); // ejecutar el callback si existe + if (callback) callback(); }, 1000); } @@ -36,8 +35,8 @@ class Chronometer { } stop() { - clearInterval(this.intervalId); // parar el intervalo - this.intervalId = null; // reiniciar la referencia + clearInterval(this.intervalId); + this.intervalId = null; } reset() {