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 ================= */
     /* ================= DROPDOWNS ================= */


     let selectedLeft = null;
     let selectedLeft = null;
Line 30: Line 30:


     function createDropdown(container, label, options, side) {
     function createDropdown(container, label, options, side) {
       const wrapper = document.createElement('div');
       const wrapper = document.createElement('div');
       wrapper.className = 'custom-dropdown';
       wrapper.className = 'custom-dropdown';
Line 39: Line 40:
       const list = document.createElement('div');
       const list = document.createElement('div');
       list.className = 'custom-dropdown-list';
       list.className = 'custom-dropdown-list';
      // 🔥 CRITICAL FIX — remove from layout completely
      list.style.position = "absolute";
      list.style.top = "100%";
      list.style.left = "0";
      list.style.display = "none";


       Object.keys(options).forEach(key => {
       Object.keys(options).forEach(key => {
Line 51: Line 58:
           if (side === 'right') selectedRight = key;
           if (side === 'right') selectedRight = key;


           wrapper.classList.remove('open');
           list.style.display = "none";
           updateResult();
           updateResult();
         };
         };
Line 59: Line 66:


       button.onclick = function () {
       button.onclick = function () {
         wrapper.classList.toggle('open');
         list.style.display = (list.style.display === "none") ? "block" : "none";
       };
       };


Line 74: Line 81:


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


       result.style.display = 'block';
       result.style.display = "block";


       const key = selectedLeft + "|" + selectedRight;
       const key = selectedLeft + "|" + selectedRight;
Line 86: Line 93:
     }
     }


    /* INIT DROPDOWNS */
     document.querySelectorAll('[data-dropdown-group]').forEach(group => {
     document.querySelectorAll('[data-dropdown-group]').forEach(group => {
       const left = group.querySelector('[data-left]');
       const left = group.querySelector('[data-left]');

Revision as of 18:47, 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();
    });

    /* ================= DROPDOWNS ================= */

    let selectedLeft = null;
    let selectedRight = null;

    function createDropdown(container, label, options, side) {

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

      const button = document.createElement('button');
      button.className = 'custom-dropdown-btn';
      button.textContent = label;

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

      // 🔥 CRITICAL FIX — remove from layout completely
      list.style.position = "absolute";
      list.style.top = "100%";
      list.style.left = "0";
      list.style.display = "none";

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

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

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

          list.style.display = "none";
          updateResult();
        };

        list.appendChild(item);
      });

      button.onclick = function () {
        list.style.display = (list.style.display === "none") ? "block" : "none";
      };

      wrapper.appendChild(button);
      wrapper.appendChild(list);

      container.innerHTML = '';
      container.appendChild(wrapper);
    }

    function updateResult() {
      const result = document.querySelector('[data-combo-result]');
      if (!result) return;

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

      result.style.display = "block";

      const key = selectedLeft + "|" + selectedRight;
      const data = JSON.parse(result.dataset.combo || "{}");

      result.innerHTML = data[key] || "No data for this combination.";
    }

    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) createDropdown(right, right.dataset.label, JSON.parse(right.dataset.options), "right");
    });

  });
});