Skip to content

Commit 9ea10c1

Browse files
Merge pull request #127 from chandra-011220/precepitation
added precipitation value of location
2 parents 17824ae + 5e9d255 commit 9ea10c1

3 files changed

Lines changed: 137 additions & 48 deletions

File tree

projects/typing-test/main.js

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,20 +177,39 @@ function appendWords(count = 10) {
177177
space.dataset.word = textArray.length - 1;
178178
textEl.appendChild(space);
179179
}
180+
181+
// Ensure caret is visible after words are added
182+
setTimeout(() => {
183+
caret.style.display = "block";
184+
caret.style.opacity = "1";
185+
updateCaret();
186+
}, 10);
180187
}
181188

182189
// Update caret position relative to text container
183190
function updateCaret() {
184191
const spans = textEl.querySelectorAll("span");
192+
185193
if (index >= spans.length) {
186194
caret.style.display = "none";
187195
return;
188196
}
197+
189198
const span = spans[index];
190-
caret.style.left = `${span.offsetLeft}px`;
191-
caret.style.top = `${span.offsetTop}px`;
192-
caret.style.height = `${span.offsetHeight}px`;
193-
caret.style.display = "block";
199+
200+
// Use requestAnimationFrame for better performance and timing
201+
requestAnimationFrame(() => {
202+
// Get the position relative to the text container
203+
const textRect = textEl.getBoundingClientRect();
204+
const spanRect = span.getBoundingClientRect();
205+
206+
// Position the caret at the beginning of the current character
207+
caret.style.left = `${spanRect.left - textRect.left}px`;
208+
caret.style.top = `${spanRect.top - textRect.top}px`;
209+
caret.style.height = `${spanRect.height}px`;
210+
caret.style.display = "block";
211+
caret.style.opacity = "1";
212+
});
194213
}
195214

196215
// Start timer on first keystroke
@@ -240,15 +259,22 @@ function resetTest() {
240259
timeLeft = parseInt(timeSelect.value);
241260
timeEl.textContent = timeLeft;
242261

243-
caret.style.display = "none";
244262
currentScoreEl.style.display = "none";
245263

246264
textArray = [];
247265
textEl.innerHTML = "";
248266
appendWords(30);
249-
updateCaret();
267+
268+
// Force caret to be visible and positioned immediately
269+
forceCaretVisible();
270+
setTimeout(forceCaretVisible, 10);
271+
setTimeout(forceCaretVisible, 50);
272+
setTimeout(forceCaretVisible, 100);
250273

251274
document.addEventListener("keydown", handleTyping);
275+
276+
// Make sure caret is visible when user clicks on text area
277+
textEl.addEventListener("click", forceCaretVisible);
252278
}
253279

254280
// Handle typing input
@@ -259,7 +285,9 @@ function handleTyping(e) {
259285
startTimer();
260286
typingStarted = true;
261287
start = Date.now();
288+
// Caret should already be visible, but ensure it's shown
262289
caret.style.display = "block";
290+
caret.style.opacity = "1";
263291
}
264292

265293
const spans = textEl.querySelectorAll("span");
@@ -329,9 +357,39 @@ window.addEventListener('resize', checkScrollable);
329357
// Update after leaderboard loads
330358
setTimeout(checkScrollable, 1000);
331359

360+
// Force caret to be visible
361+
function forceCaretVisible() {
362+
if (caret) {
363+
caret.style.display = "block";
364+
caret.style.opacity = "1";
365+
caret.style.visibility = "visible";
366+
updateCaret();
367+
}
368+
}
369+
332370
// Initialize
333371
resetTest();
334372
initLeaderboard();
335373
restartBtn.addEventListener("click", resetTest);
336374
timeSelect.addEventListener("change", resetTest);
337-
window.addEventListener("resize", updateCaret);
375+
window.addEventListener("resize", updateCaret);
376+
377+
// Ensure caret is visible when page loads
378+
document.addEventListener("DOMContentLoaded", () => {
379+
setTimeout(forceCaretVisible, 100);
380+
setTimeout(forceCaretVisible, 300);
381+
setTimeout(forceCaretVisible, 500);
382+
});
383+
384+
// Also ensure caret is visible after a short delay
385+
setTimeout(forceCaretVisible, 200);
386+
setTimeout(forceCaretVisible, 400);
387+
setTimeout(forceCaretVisible, 800);
388+
389+
// Ensure caret is visible when window gets focus
390+
window.addEventListener("focus", forceCaretVisible);
391+
window.addEventListener("load", forceCaretVisible);
392+
393+
394+
395+

0 commit comments

Comments
 (0)