- // ==UserScript==
- // @name Esketit - Add Net Return to Statement
- // @namespace http://esketit.com/
- // @version 2024-10-20
- // @description Proving to others that it's important
- // @author rs232
- // @match https://esketit.com/investor/account-statement
- // @icon https://www.google.com/s2/favicons?sz=32&domain_url=https%3A%2F%2Fwww.esketit.com
- // @grant none
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // Store previous values to track changes
- let previousValues = {
- interestReceived: "0,00",
- bonusReceived: "0,00",
- referralBonusReceived: "0,00",
- secondaryMarketIncome: "0,00",
- secondaryMarketExpense: "0,00"
- };
-
- // Function to check if any value has changed
- function checkValues() {
- let interestReceived = document.querySelector(".panel-row:nth-child(10) > .text-right");
- let bonusReceived = document.querySelector(".panel-row:nth-child(11) > .text-right");
- let referralBonusReceived = document.querySelector(".panel-row:nth-child(12) > .text-right");
- let secondaryMarketIncome = document.querySelector(".panel-row:nth-child(13) > .text-right");
- let secondaryMarketExpense = document.querySelector(".panel-row:nth-child(14) > .text-right");
-
- // Check if any of the values have changed from their previous state
- if (
- (interestReceived && interestReceived.textContent.trim() !== previousValues.interestReceived) ||
- (bonusReceived && bonusReceived.textContent.trim() !== previousValues.bonusReceived) ||
- (referralBonusReceived && referralBonusReceived.textContent.trim() !== previousValues.referralBonusReceived) ||
- (secondaryMarketIncome && secondaryMarketIncome.textContent.trim() !== previousValues.secondaryMarketIncome) ||
- (secondaryMarketExpense && secondaryMarketExpense.textContent.trim() !== previousValues.secondaryMarketExpense)
- ) {
- // Delay to allow for data stabilization
- setTimeout(doMe, 500); // Adjust the timeout as needed
-
- // Update previous values after displaying alerts
- previousValues.interestReceived = interestReceived ? interestReceived.textContent.trim() : "0,00";
- previousValues.bonusReceived = bonusReceived ? bonusReceived.textContent.trim() : "0,00";
- previousValues.referralBonusReceived = referralBonusReceived ? referralBonusReceived.textContent.trim() : "0,00";
- previousValues.secondaryMarketIncome = secondaryMarketIncome ? secondaryMarketIncome.textContent.trim() : "0,00";
- previousValues.secondaryMarketExpense = secondaryMarketExpense ? secondaryMarketExpense.textContent.trim() : "0,00";
- }
- }
-
- function formatCurrency(value) {
- // Format the number with dots as thousand separators and two decimal places
- return value.toString().replace('.', ',').replace(/\B(?=(\d{3})+(?!\d))/g, '.');
- }
-
- function doMe() {
- // Get values and strip out the Euro sign and unwanted spaces
- let interestReceived = parseFloat(document.querySelector(".panel-row:nth-child(10) > .text-right").textContent.replace('€', '').replace(/\s/g, '').replace(',', '.')) || 0;
- let bonusReceived = parseFloat(document.querySelector(".panel-row:nth-child(11) > .text-right").textContent.replace('€', '').replace(/\s/g, '').replace(',', '.')) || 0;
- let referralBonusReceived = parseFloat(document.querySelector(".panel-row:nth-child(12) > .text-right").textContent.replace('€', '').replace(/\s/g, '').replace(',', '.')) || 0;
- let secondaryMarketIncome = parseFloat(document.querySelector(".panel-row:nth-child(13) > .text-right").textContent.replace('€', '').replace(/\s/g, '').replace(',', '.')) || 0;
-
- // For secondary market expense, we assume it's already a negative number
- let secondaryMarketExpense = parseFloat(document.querySelector(".panel-row:nth-child(14) > .text-right").textContent.replace('€', '').replace(/\s/g, '').replace(',', '.')) || 0;
-
- // Calculate Net Interest (adding all variables including negative expense)
- let netInterest = interestReceived + bonusReceived + referralBonusReceived + secondaryMarketIncome + secondaryMarketExpense;
-
- // Format the net interest for display
- const formattedNetInterest = formatCurrency(netInterest.toFixed(2));
-
- // Create or update the Net Interest display div
- let netInterestDiv = document.getElementById('net-interest-display');
-
- if (!netInterestDiv) {
- // Create new div if it doesn't exist
- netInterestDiv = document.createElement('div');
- netInterestDiv.id = 'net-interest-display';
- netInterestDiv.style.display = 'flex'; // Use flexbox for layout
- netInterestDiv.style.justifyContent = 'space-between'; // Space between items
- netInterestDiv.style.marginTop = '10px'; // Add some spacing above
- netInterestDiv.style.color = 'darkgreen'; // Set text color to dark green
- netInterestDiv.style.fontWeight = 'bold'; // Make text bold
-
- const referenceLabel = document.createElement('div');
- referenceLabel.innerText = 'Net Interest';
-
- const valueLabel = document.createElement('div');
- valueLabel.innerText = `€ ${formattedNetInterest}`;
-
- netInterestDiv.appendChild(referenceLabel);
- netInterestDiv.appendChild(valueLabel);
-
- // Insert the new div after the specified element
- const targetElement = document.querySelector('.mt-3');
- targetElement.parentNode.insertBefore(netInterestDiv, targetElement.nextSibling);
-
- } else {
- // Update existing div with new Net Interest value
- netInterestDiv.children[1].innerText = `€ ${formattedNetInterest}`;
- }
- }
-
- const targetElement = document.body; // Observe the whole body for changes
-
- // Create a MutationObserver to watch for changes in the target element
- const observer = new MutationObserver((mutationsList) => {
- mutationsList.forEach(mutation => {
- // Call checkValues whenever there is a mutation
- checkValues();
- });
- });
-
- // Configure the observer to watch for child nodes and character data changes
- observer.observe(targetElement, {
- childList: true,
- subtree: true,
- characterData: true
- });
-
- // Initial check when the page loads
- window.addEventListener('load', checkValues);
- })();