Display current session information on Nitro Type pages
// ==UserScript==
// @name Nitro Type Current Session Display
// @version 0.5
// @description Display current session information on Nitro Type pages
// @author Cortezz
// @match https://www.nitrotype.com/*
// @grant GM_xmlhttpRequest
// @namespace none
// ==/UserScript==
(function() {
'use strict';
// Create HTML element to display current session information
var sessionDiv = document.createElement('div');
sessionDiv.setAttribute('id', 'sessionDiv');
sessionDiv.style.position = 'fixed';
sessionDiv.style.bottom = '20px';
sessionDiv.style.right = '20px';
sessionDiv.style.padding = '10px';
sessionDiv.style.backgroundColor = '#fff';
sessionDiv.style.border = '2px solid #000';
sessionDiv.style.zIndex = '9999';
sessionDiv.innerHTML = `
<div>Current Session:</div>
<div id="currentSessionInfo">Loading...</div>
<button id="closeButton">Close</button>
`;
document.body.appendChild(sessionDiv);
// Function to update session information
function updateSessionInfo(sessionData) {
var sessionInfo = 'WPM: ' + sessionData.WPM + ' | Accuracy: ' + sessionData.Accuracy + ' | Races Completed: ' + sessionData.RacesCompleted;
document.getElementById('currentSessionInfo').innerText = sessionInfo;
}
// Function to fetch user's session data from the Nitro Type page
function fetchSessionData() {
var statsContainer = document.querySelector('.nt-stats-metric-session-races').parentNode;
if (statsContainer) {
var sessionData = {
WPM: statsContainer.querySelector('.nt-stats-metric-session-wpm').innerText.trim(),
Accuracy: statsContainer.querySelector('.nt-stats-metric-session-accuracy').innerText.trim(),
RacesCompleted: statsContainer.querySelector('.nt-stats-metric-session-races').innerText.trim()
};
updateSessionInfo(sessionData);
} else {
setTimeout(fetchSessionData, 1000); // Retry after 1 second if stats container is not found
}
}
// Update session info initially
fetchSessionData();
// Close button event listener
document.getElementById('closeButton').addEventListener('click', function() {
sessionDiv.style.display = 'none';
});
// Refresh handler
window.addEventListener('beforeunload', function() {
sessionStorage.setItem('sessionDivDisplay', sessionDiv.style.display);
});
window.addEventListener('load', function() {
var displaySetting = sessionStorage.getItem('sessionDivDisplay');
if (displaySetting !== 'none') {
sessionDiv.style.display = displaySetting;
}
});
})();