MWI-Equipment-Diff

Make life easier

// ==UserScript==
// @name         MWI-Equipment-Diff
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  Make life easier
// @author       BKN46
// @match        https://*.milkywayidle.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=milkywayidle.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
  'use strict';

  let equipmentToDiff = {};
  const isZHInGameSetting = localStorage.getItem("i18nextLng")?.toLowerCase()?.startsWith("zh");
  let isZH = isZHInGameSetting;

  function parseEquipmentModal(element) {
    const equipmentDetail = {};
    const detailLines = element.querySelectorAll('.EquipmentStatsText_stat__27Sus');
    for (const line of detailLines) {
      if (line.querySelector('.EquipmentStatsText_uniqueStat__2xvqX')) continue;
      const data = line.textContent.split(':');
      if (data.length === 2) {
        const key = data[0].trim();
        const value = data[1].split('(')[0].trim();
        if (value === 'N/A') continue;
        equipmentDetail[key] = value;
      }
    }

    if (!element.querySelector('.diff-tooltip')) {
      const diffTooltip = document.createElement('div');
      diffTooltip.className = 'diff-tooltip';
      diffTooltip.textContent = isZH ? '按\'d\'来添加作为对比对象' : 'Press "d" to add to quick diff';
      diffTooltip.style = 'color:rgb(0, 108, 158); font-weight: bold;';
      element.appendChild(diffTooltip);

      if (equipmentToDiff.data) {
        const diffRemoveTooltip = document.createElement('div');
        diffRemoveTooltip.className = 'diff-remove-tooltip';
        diffRemoveTooltip.textContent = isZH ? '按\'r\'来移除当前对比' : 'Press "r" to remove present quick diff';
        diffRemoveTooltip.style = 'color:rgb(0, 108, 158); font-weight: bold;';
        element.appendChild(diffRemoveTooltip);
      }
    }
    
    return equipmentDetail;
  }

  function addDiffToModal(element, data) {
    if (element.querySelector('.diff-value')) return;
    const TextArea = element.querySelector('.EquipmentStatsText_equipmentStatsText__djKBS').firstChild;
    const detailLines = element.querySelectorAll('.EquipmentStatsText_stat__27Sus');
    for (const line of detailLines) {
      const key = line.textContent.split(':')[0].trim();
      const valueElement = line.querySelectorAll('span')[1];
      const diffSpan = document.createElement('span');
      diffSpan.className = 'diff-value';
      diffSpan.style = 'color: rgb(0, 108, 158); font-weight: bold;';
      if (key in equipmentToDiff.data) {
        const diffValue = equipmentToDiff.data[key];
        diffSpan.textContent = ` (${diffValue})`;
        if (data[key] === diffValue) {
          continue;
        }
      } else {
        diffSpan.textContent = ` (N/A)`;
      }
      valueElement.appendChild(diffSpan);
    }
    for (const key in equipmentToDiff.data) {
      if (!(key in data)) {
        const newLine = document.createElement('div');
        newLine.className = 'EquipmentStatsText_stat__27Sus';

        const keySpan = document.createElement('span');
        keySpan.textContent = `${key}: `;
        newLine.appendChild(keySpan);

        const valueSpan = document.createElement('span');
        valueSpan.textContent = 'N/A';
        newLine.appendChild(valueSpan);

        const diffSpan = document.createElement('span');
        diffSpan.className = 'diff-value';
        diffSpan.textContent = ` (${equipmentToDiff.data[key]})`;
        diffSpan.style = 'color: rgb(0, 108, 158); font-weight: bold;';
        valueSpan.appendChild(diffSpan);
        TextArea.appendChild(newLine);
      }
    }
  }

  setInterval(() => {
    const modal = document.querySelector('.MuiPopper-root');
    if (!modal) return;
    const equipmentDetail = modal.querySelector('.ItemTooltipText_equipmentDetail__3sIHT');
    if (!equipmentDetail) return;

    const equipmentName = modal.querySelector('.ItemTooltipText_name__2JAHA').textContent.trim();
    const equipmentData = parseEquipmentModal(equipmentDetail);

    if (equipmentToDiff.data) {
      addDiffToModal(equipmentDetail, equipmentData);
    }

    document.onkeydown = (event) => {
      if (event.key === 'd') {
        // event.preventDefault();
        console.log(`Added to quick diff: ${equipmentName}`);
        equipmentToDiff = {
          data: equipmentData,
          name: equipmentName,
        };
        equipmentDetail.querySelector('.diff-tooltip').textContent = isZH ? '已添加作为对比' : 'Added to quick diff';
      } else if (event.key === 'r') {
        // event.preventDefault();
        console.log(`Removed from quick diff: ${equipmentName}`);
        equipmentToDiff = {};
        equipmentDetail.querySelector('.diff-tooltip').textContent = isZH ? '已移除对比' : 'Removed from quick diff';
      }
    };

  }, 500)

})();