Adds a "Shortfall" and "Time Calculation" to Exchange table, Adds BP per second, minute,...
- // ==UserScript==
- // @name AvistaZ Bonus Point Plus+
- // @namespace https://github.com/royspace/AvistaZ-Bonus-Point-Plus
- // @homepage https://github.com/royspace/AvistaZ-Bonus-Point-Plus
- // @version 0.3
- // @author Roy
- // @description Adds a "Shortfall" and "Time Calculation" to Exchange table, Adds BP per second, minute,...
- // @match https://avistaz.to/profile/*/bonus
- // @icon https://avistaz.to/images/avistaz-favicon.png
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- function createCalculationTable(pointsPerHour) {
- var pointsPerSecond = pointsPerHour / 3600;
- var pointsPerMinute = pointsPerHour / 60;
- var pointsPerDay = pointsPerHour * 24;
- var pointsPerWeek = pointsPerDay * 7;
- var pointsPerMonth = pointsPerDay * 30;
- var pointsPerYear = pointsPerDay * 365;
- var table = document.createElement('table');
- table.style.borderCollapse = 'collapse';
- table.style.marginTop = '10px';
- table.style.width = '100%';
- var tableHeader = table.createTHead();
- var headerRow = tableHeader.insertRow();
- var headerCellLabel = headerRow.insertCell();
- var headerCellValue = headerRow.insertCell();
- headerCellLabel.innerHTML = 'Calculation';
- headerCellLabel.style.backgroundColor = '#001F3F';
- headerCellLabel.style.fontWeight = 'bold';
- headerCellLabel.style.padding = '10px';
- headerCellValue.innerHTML = 'Value';
- headerCellValue.style.backgroundColor = '#001F3F';
- headerCellValue.style.fontWeight = 'bold';
- headerCellValue.style.padding = '10px';
- var tableBody = table.createTBody();
- function addRow(label, value) {
- var row = tableBody.insertRow();
- var cellLabel = row.insertCell(0);
- var cellValue = row.insertCell(1);
- cellLabel.innerHTML = label;
- cellLabel.style.textAlign = 'left';
- cellLabel.style.paddingLeft = '10px';
- cellLabel.style.fontWeight = '400';
- cellValue.innerHTML = value.toFixed(2);
- cellValue.style.textAlign = 'right';
- cellValue.style.paddingRight = '10px';
- cellValue.style.fontWeight = '550';
- }
- addRow('Points Per Second', pointsPerSecond);
- addRow('Points Per Minute', pointsPerMinute);
- addRow('Points Per Hour', pointsPerHour);
- addRow('Points Per Day', pointsPerDay);
- addRow('Points Per Week', pointsPerWeek);
- addRow('Points Per Month', pointsPerMonth);
- addRow('Points Per Year', pointsPerYear);
- return table;
- }
- function addCalculationColumn() {
- var pointsPerHour = parseFloat(document.querySelector('td:nth-child(3) strong').textContent);
- const header = document.querySelector('div > div > .col-sm-8 > table > thead > tr');
- if (header) {
- const shortfallHeaderCell = document.createElement('th');
- shortfallHeaderCell.textContent = 'Shortfall';
- header.querySelector('th:nth-child(2)').after(shortfallHeaderCell);
- const timeCalculationHeaderCell = document.createElement('th');
- timeCalculationHeaderCell.textContent = 'Time Calculation';
- shortfallHeaderCell.after(timeCalculationHeaderCell);
- }
- const tbody = document.querySelector('div > div > .col-sm-8 > table > tbody');
- const trimValueElement = document.querySelector('h2');
- const trimValue = parseFloat(trimValueElement.textContent.replace(/[^\d.]/g, '')) || 0;
- function formatTime(hours) {
- const months = Math.floor(hours / (30 * 24));
- const days = Math.floor((hours % (30 * 24)) / 24);
- const remainingHours = Math.round(hours % 24);
- let r###lt = '';
- if (months > 0) {
- r###lt += `${months} month${months > 1 ? 's' : ''}, `;
- }
- if (days > 0) {
- r###lt += `${days} day${days > 1 ? 's' : ''}, `;
- }
- if (remainingHours > 0) {
- r###lt += `${remainingHours} hour${remainingHours > 1 ? 's' : ''}`;
- }
- return r###lt.trim();
- }
- if (tbody) {
- const rows = tbody.querySelectorAll('tr');
- rows.forEach((row, index) => {
- const pointsCell = row.querySelector('td:nth-child(2)');
- const pointsValue = parseInt(pointsCell.textContent.replace(/,/g, ''), 10);
- const shortfallValue = Math.max(pointsValue - trimValue, 0).toFixed(0);
- const shortfallCell = document.createElement('td');
- shortfallCell.textContent = shortfallValue;
- pointsCell.after(shortfallCell);
- const timeCalculationValue = shortfallValue / pointsPerHour;
- const timeCalculationCell = document.createElement('td');
- timeCalculationCell.textContent = formatTime(timeCalculationValue);
- shortfallCell.after(timeCalculationCell);
- });
- }
- }
- var targetElement = document.querySelector('div > div .well-sm > h3');
- if (targetElement) {
- var pointsPerHour = parseFloat(document.querySelector('td:nth-child(3) strong').textContent);
- var calculationTable = createCalculationTable(pointsPerHour);
- targetElement.parentNode.insertBefore(calculationTable, targetElement.nextSibling);
- }
- addCalculationColumn();
- })();