Calculate and display vote difference between two candidates with formatted numbers, improved styling, and time
// ==UserScript==
// @name Candidate Vote Difference with Formatting and Styling
// @namespace http://tampermonkey.net/
// @version 0.3
// @description Calculate and display vote difference between two candidates with formatted numbers, improved styling, and time
// @author You
// @match https://prezenta.roaep.ro/prezidentiale24112024/pv/romania/results/
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Function to extract candidate data
function extractData() {
// Candidates you're interested in
const candidates = ["ION-MARCEL CIOLACU", "ELENA-VALERICA LASCONI"];
// Wait for the page to load properly and then execute the logic
const rows = document.querySelectorAll("tr");
let candidateVotes = {};
rows.forEach(row => {
const nameElement = row.querySelector("span");
if (nameElement) {
const candidateName = nameElement.innerText.trim();
// If it's one of the candidates we're tracking
if (candidates.includes(candidateName)) {
const numbers = row.querySelectorAll("span");
if (numbers.length >= 2) {
const votes = parseInt(numbers[1].innerText.trim().replace(/\D/g, '')); // Remove non-numeric characters
candidateVotes[candidateName] = votes;
}
}
}
});
// Check if both candidates' votes were found
if (candidateVotes["ION-MARCEL CIOLACU"] && candidateVotes["ELENA-VALERICA LASCONI"]) {
const ciolacuVotes = candidateVotes["ION-MARCEL CIOLACU"];
const lasconiVotes = candidateVotes["ELENA-VALERICA LASCONI"];
const voteDifference = ciolacuVotes - lasconiVotes;
// Display the result on the page
displayResult(ciolacuVotes, lasconiVotes, voteDifference);
}
}
// Function to format numbers with a dot as a thousands separator
function formatNumber(number) {
return number.toLocaleString('en-GB'); // 'en-GB' uses a dot as the thousands separator
}
// Function to get the current time in a readable format
function getCurrentTime() {
const now = new Date();
return now.toLocaleTimeString(); // Returns time in the format HH:MM:SS AM/PM
}
// Function to display the result on the page
function displayResult(ciolacuVotes, lasconiVotes, voteDifference) {
// Create a div element to show the result
const resultDiv = document.createElement("div");
resultDiv.style.position = "fixed";
resultDiv.style.top = "10px";
resultDiv.style.right = "10px";
resultDiv.style.backgroundColor = "#333"; // Dark background for better readability
resultDiv.style.color = "#fff"; // White text for contrast
resultDiv.style.borderRadius = "15px"; // Rounded corners
resultDiv.style.padding = "20px"; // Padding around the content
resultDiv.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.2)"; // Subtle shadow for depth
resultDiv.style.fontFamily = "'Arial', sans-serif"; // Clean font style
resultDiv.style.zIndex = "9999";
resultDiv.style.fontSize = "16px"; // Slightly larger text for better readability
resultDiv.style.maxWidth = "300px"; // Limit the width for better layout
resultDiv.innerHTML = `
<h3 style="font-size: 18px; font-weight: bold;">Vote Difference:</h3>
<p style="color: rgb(201, 35, 43);">ION-MARCEL CIOLACU Votes: <strong>${formatNumber(ciolacuVotes)}</strong></p>
<p style="color: rgb(45, 111, 163);">ELENA-VALERICA LASCONI Votes: <strong>${formatNumber(lasconiVotes)}</strong></p>
<p>Vote Difference: <strong>${formatNumber(voteDifference)}</strong></p>
<p style="font-size: 14px;">Last Updated: <strong>${getCurrentTime()}</strong></p>
`;
// Append the result div to the body
document.body.appendChild(resultDiv);
}
// Wait for the page to load and then extract data
window.addEventListener('load', () => {
setTimeout(extractData, 3000); // Wait a few seconds for the page to fully load
});
})();