Jump to content

MediaWiki:Common.js: Difference between revisions

From Once Human Guide
No edit summary
No edit summary
Line 24: Line 24:
     });
     });


     /* ================= DROPDOWN SYSTEM ================= */
     /* ================= AUTO MOD SYSTEM ================= */


     let selectedLeft = null;
     document.querySelectorAll('.mod-system').forEach(system => {
    let selectedRight = null;


    function createDropdown(container, label, options, side) {
      const modType = system.dataset.mod;
       const wrapper = document.createElement('div');
       const dataBlock = document.querySelector('#mod-database [data-mod="' + modType + '"]');
      if (!dataBlock) return;


       const button = document.createElement('button');
       const leftData = JSON.parse(dataBlock.querySelector('[data-left]').dataset.left);
       button.textContent = label;
       const rightData = JSON.parse(dataBlock.querySelector('[data-right]').dataset.right);


       let list = null;
       let selectedLeft = null;
      let selectedRight = null;


       button.onclick = function () {
       const leftDiv = document.createElement('div');
      const rightDiv = document.createElement('div');
      const result = document.createElement('div');


        // Close any open dropdown
      result.style.display = "none";
        document.querySelectorAll('.dropdown-list').forEach(el => el.remove());
      result.style.border = "1px solid #444";
      result.style.padding = "10px";
      result.style.marginTop = "10px";


         list = document.createElement('div');
      function createDropdown(container, options, side) {
         list.className = 'dropdown-list';
         const btn = document.createElement('button');
         btn.textContent = "Select";


         Object.keys(options).forEach(key => {
         btn.onclick = function () {
           const item = document.createElement('div');
           document.querySelectorAll('.dropdown-list').forEach(el => el.remove());
          item.textContent = options[key];


           item.onclick = function () {
           const list = document.createElement('div');
            button.textContent = options[key];
          list.className = 'dropdown-list';


            if (side === 'left') selectedLeft = key;
          Object.keys(options).forEach(key => {
             if (side === 'right') selectedRight = key;
            const item = document.createElement('div');
             item.textContent = options[key];


             list.remove();
             item.onclick = function () {
            updateResult();
              btn.textContent = options[key];
          };


          list.appendChild(item);
              if (side === "left") selectedLeft = key;
        });
              if (side === "right") selectedRight = key;


        wrapper.appendChild(list);
              list.remove();
      };
              update();
            };


      wrapper.appendChild(button);
            list.appendChild(item);
      container.innerHTML = '';
          });
      container.appendChild(wrapper);
    }


    /* ================= RESULT SYSTEM (SAFE VERSION) ================= */
          container.appendChild(list);
        };


    function updateResult() {
        container.appendChild(btn);
      const result = document.getElementById("result-box");
      if (!result) return;
 
      if (!selectedLeft || !selectedRight) {
        result.style.display = "none";
        return;
       }
       }


       const key = selectedLeft + "__" + selectedRight;
       function update() {
        if (!selectedLeft || !selectedRight) {
          result.style.display = "none";
          return;
        }


      const data = document.querySelector('[data-key="' + key + '"]');
        const key = selectedLeft + "__" + selectedRight;
        const match = dataBlock.querySelector('[data-key="' + key + '"]');


      if (!data) {
         result.style.display = "block";
         result.style.display = "block";
         result.innerHTML = "No data found.";
         result.innerHTML = match ? match.innerHTML : "No data";
        return;
       }
       }


       result.style.display = "block";
       createDropdown(leftDiv, leftData, "left");
      result.innerHTML = data.innerHTML;
       createDropdown(rightDiv, rightData, "right");
    }
 
    /* ================= INIT DROPDOWNS ================= */
 
    document.querySelectorAll('[data-dropdown-group]').forEach(group => {
      const left = group.querySelector('[data-left]');
       const right = group.querySelector('[data-right]');
 
      if (left) {
        createDropdown(
          left,
          left.dataset.label,
          JSON.parse(left.dataset.options),
          "left"
        );
      }


       if (right) {
       system.appendChild(leftDiv);
        createDropdown(
      system.appendChild(rightDiv);
          right,
      system.appendChild(result);
          right.dataset.label,
          JSON.parse(right.dataset.options),
          "right"
        );
      }
     });
     });


   });
   });
});
});

Revision as of 19:39, 21 April 2026

mw.loader.using('mediawiki.util').then(function () {
  $(function () {

    /* ================= TAB SYSTEM ================= */
    document.querySelectorAll('.mw-tab-buttons').forEach(group => {
      const buttons = group.querySelectorAll('.mw-tab-btn');

      buttons.forEach(btn => {
        btn.onclick = function () {
          const tabId = this.dataset.tab;
          const container = group.closest('.mw-tab-content') || document;

          container.querySelectorAll('.mw-tab-content').forEach(c => c.style.display = 'none');
          container.querySelectorAll('.mw-tab-btn').forEach(b => b.classList.remove('active'));

          this.classList.add('active');

          const target = container.querySelector('#' + tabId);
          if (target) target.style.display = 'block';
        };
      });

      if (buttons.length) buttons[0].click();
    });

    /* ================= AUTO MOD SYSTEM ================= */

    document.querySelectorAll('.mod-system').forEach(system => {

      const modType = system.dataset.mod;
      const dataBlock = document.querySelector('#mod-database [data-mod="' + modType + '"]');
      if (!dataBlock) return;

      const leftData = JSON.parse(dataBlock.querySelector('[data-left]').dataset.left);
      const rightData = JSON.parse(dataBlock.querySelector('[data-right]').dataset.right);

      let selectedLeft = null;
      let selectedRight = null;

      const leftDiv = document.createElement('div');
      const rightDiv = document.createElement('div');
      const result = document.createElement('div');

      result.style.display = "none";
      result.style.border = "1px solid #444";
      result.style.padding = "10px";
      result.style.marginTop = "10px";

      function createDropdown(container, options, side) {
        const btn = document.createElement('button');
        btn.textContent = "Select";

        btn.onclick = function () {
          document.querySelectorAll('.dropdown-list').forEach(el => el.remove());

          const list = document.createElement('div');
          list.className = 'dropdown-list';

          Object.keys(options).forEach(key => {
            const item = document.createElement('div');
            item.textContent = options[key];

            item.onclick = function () {
              btn.textContent = options[key];

              if (side === "left") selectedLeft = key;
              if (side === "right") selectedRight = key;

              list.remove();
              update();
            };

            list.appendChild(item);
          });

          container.appendChild(list);
        };

        container.appendChild(btn);
      }

      function update() {
        if (!selectedLeft || !selectedRight) {
          result.style.display = "none";
          return;
        }

        const key = selectedLeft + "__" + selectedRight;
        const match = dataBlock.querySelector('[data-key="' + key + '"]');

        result.style.display = "block";
        result.innerHTML = match ? match.innerHTML : "No data";
      }

      createDropdown(leftDiv, leftData, "left");
      createDropdown(rightDiv, rightData, "right");

      system.appendChild(leftDiv);
      system.appendChild(rightDiv);
      system.appendChild(result);
    });

  });
});