light.gg linking for DIM

Add links to light.gg for DIM

// ==UserScript==
// @name                light.gg linking for DIM
// @name:zh             DIM 链接到 light.gg
// @name:zh-CN          DIM 链接到 light.gg
// @namespace           https://github.com/HirotaZX
// @version             0.1.3
// @description         Add links to light.gg for DIM
// @description:zh      为DIM添加light.gg链接
// @description:zh-CN   为DIM添加light.gg链接
// @author              HirotaZX
// @match               https://app.destinyitemmanager.com/*
// @match               https://beta.destinyitemmanager.com/*
// @grant               none
// ==/UserScript==

(function () {
  'use strict';

  let targetNode = document.querySelector('#temp-container');
  const observer = new MutationObserver(function (mutationsList) {
    for (const mutation of mutationsList) {
      if (mutation.type === 'childList'
        && mutation.addedNodes.length != 0
        && mutation.addedNodes[0].classList.contains('item-popup')) {
        const itemPopup = mutation.addedNodes[0];
        const addLgg = function () {
          if (itemPopup.querySelector('.btn-lgg')) {
            return;
          }
          let item = null;
          const itemNameElm = itemPopup.querySelector('button h1 span');
          if (itemNameElm && itemNameElm.parentElement) {
            const fiberKey = Object.keys(itemNameElm).find(key => key.startsWith("__reactFiber$"));
            if (fiberKey && itemNameElm[fiberKey]) {
              const nameFiber = itemNameElm[fiberKey];
              const itemFiber = nameFiber?.return?.return?.return?.return;
              if (itemFiber) {
                if (itemFiber.pendingProps && itemFiber.pendingProps.item) {
                  item = itemFiber.pendingProps.item;
                } else if (itemFiber.memoizedProps && itemFiber.memoizedProps.item) {
                  item = itemFiber.memoizedProps.item;
                }
              }
            }
          }
          if (!item || item.name.toUpperCase() != itemNameElm.innerText.toUpperCase()) {
            return;
          }
          const tempDiv = document.createElement('div');
          tempDiv.innerHTML = '<a class="btn-lgg" style="float:right;margin-right:5px;" target="_blank" href="https://www.light.gg/db/items/' + item.hash + '/"><img src="data:image/webp;base64,UklGRlwBAABXRUJQVlA4TE8BAAAvD8ADEO/BoJEkRX34KOX9C2P+tsE4kmwl8z8uJxLwHLiRfzruj2XQSJKivrt//8pewEtgZmqDbCP1HvrV3uOFLpQFChQckAqUwh/x4T+AoAHB6pEjgUSBTCB7YIF8DCc/0DbnHtuh4H2xH7vzuoTgEPzv2JLPPp99plGvRrqPrECCi5IAdH89/C34Hwh+DxWQfH5OoJ/VWBdqjmzoS8wTcOgGKBxGkm1a59nWt2375x/YUwp3343ov8K2bZvsdFdnxKFAAFRXBiCEMSPA6fYHu9MqIYCJQGs07nVm2/t1Ssh9whyybKTbxzSfHTGF9G/DEWyvCaE7dqD9n5w1yG4roN8j/f96M/7XsTlAHbaN3/P9AeM/c3n2vf3crBY6bmoarG5ZzZLkug0qDsrRTB/blOwChyKY6fW+XjBe5JRzTFaHS8OLHKMCZ8lveIFzBAA=" /></a>';
          tempDiv.firstChild.onclick = function (e) {
            e.stopPropagation();
          }
          itemNameElm.after(tempDiv.firstChild);
        };
        addLgg();
        const subObserver = new MutationObserver(addLgg);
        subObserver.observe(itemPopup, { attributes: true, subTree: true });
      }
    }
  });
  observer.observe(targetNode, { childList: true });

})();