document.addEventListener('DOMContentLoaded', function () { // Re-render MathJax after the page loads MathJax.typeset(); }); function parseTimeToSeconds(timeString) { var parts = timeString.split(':'); if (parts.length !== 3) { throw new Error('Invalid time format. Please use HH:MM:SS'); } var hours = parseInt(parts[0], 10); var minutes = parseInt(parts[1], 10); var seconds = parseInt(parts[2], 10); return hours * 3600 + minutes * 60 + seconds; } document.getElementById('typingForm').addEventListener('submit', function(event) { event.preventDefault(); // Prevent the form from submitting normally // Get input values var typedWords = parseFloat(document.getElementById('typedWords').value); var correctWords = parseFloat(document.getElementById('correctWords').value); var errors = parseFloat(document.getElementById('errors').value); var keystrokes = parseFloat(document.getElementById('keystrokes').value); var correctKeystrokes = parseFloat(document.getElementById('correctKeystrokes').value); var incorrectKeystrokes = parseFloat(document.getElementById('incorrectKeystrokes').value); var timeTakenString = document.getElementById('timeTaken').value; try { // Convert time taken from HH:MM:SS to seconds var timeInSeconds = parseTimeToSeconds(timeTakenString); // Convert seconds to minutes var timeInMinutes = timeInSeconds / 60; // Calculate GWPM, NWPM, Accuracy, GKPM, NKPM, and KPM Accuracy if (timeInMinutes > 0) { var gwpm = typedWords / timeInMinutes; var nwpm = correctWords / timeInMinutes; var accuracy = (correctWords / typedWords) * 100; var kpm = keystrokes / timeInMinutes; var gkpm = (keystrokes / 5) / timeInMinutes; var nkpm = ((keystrokes - incorrectKeystrokes) / 5) / timeInMinutes; var kpmAccuracy = (correctKeystrokes / keystrokes) * 100; // Display the results document.getElementById('gwpmSpeed').textContent = gwpm.toFixed(2); document.getElementById('nwpmSpeed').textContent = nwpm.toFixed(2); document.getElementById('accuracyPercent').textContent = accuracy.toFixed(2); document.getElementById('gkpmSpeed').textContent = gkpm.toFixed(2); document.getElementById('nkpmSpeed').textContent = nkpm.toFixed(2); document.getElementById('kpmaccuracyPercent').textContent = kpmAccuracy.toFixed(2); } else { document.getElementById('gwpmSpeed').textContent = 'Invalid input'; document.getElementById('nwpmSpeed').textContent = 'Invalid input'; document.getElementById('accuracyPercent').textContent = 'Invalid input'; document.getElementById('gkpmSpeed').textContent = 'Invalid input'; document.getElementById('nkpmSpeed').textContent = 'Invalid input'; document.getElementById('kpmaccuracyPercent').textContent = 'Invalid input'; } } catch (error) { document.getElementById('gwpmSpeed').textContent = 'Invalid time format'; document.getElementById('nwpmSpeed').textContent = 'Invalid time format'; document.getElementById('accuracyPercent').textContent = 'Invalid time format'; document.getElementById('gkpmSpeed').textContent = 'Invalid time format'; document.getElementById('nkpmSpeed').textContent = 'Invalid time format'; document.getElementById('kpmaccuracyPercent').textContent = 'Invalid time format'; } }); // Reset button functionality document.getElementById('resetButton').addEventListener('click', function() { document.getElementById('typedWords').value = ''; document.getElementById('correctWords').value = ''; document.getElementById('errors').value = ''; document.getElementById('keystrokes').value = ''; document.getElementById('correctKeystrokes').value = ''; document.getElementById('incorrectKeystrokes').value = ''; document.getElementById('timeTaken').value = ''; document.getElementById('gwpmSpeed').textContent = '-'; document.getElementById('nwpmSpeed').textContent = '-'; document.getElementById('accuracyPercent').textContent = '-'; document.getElementById('gkpmSpeed').textContent = '-'; document.getElementById('nkpmSpeed').textContent = '-'; document.getElementById('kpmaccuracyPercent').textContent = '-'; }); // Function to limit input length function limitInputLength(input, maxLength) { if (input.value.length > maxLength) { input.value = input.value.slice(0, maxLength); } }