Jump to content

MediaWiki:Common.js: Difference between revisions

From Once Human Guide
No edit summary
Tag: Reverted
No edit summary
Tag: Reverted
Line 4: Line 4:
     console.log("COMMON.JS LOADED");
     console.log("COMMON.JS LOADED");


     /* ================= OLD SELECT DROPDOWNS ================= */
     try {


    document.querySelectorAll('.mw-dropdown-ui').forEach(container => {
      /* ================= OLD SELECT DROPDOWNS ================= */
      const select = container.querySelector('select');
      const sections = container.querySelectorAll('.dropdown-section');


       if (!select) return;
       document.querySelectorAll('.mw-dropdown-ui').forEach(container => {
        const select = container.querySelector('select');
        const sections = container.querySelectorAll('.dropdown-section');


      select.addEventListener('change', function () {
         if (!select) return;
         sections.forEach(s => s.style.display = 'none');


         const target = container.querySelector('#' + this.value);
         select.addEventListener('change', function () {
        if (target) target.style.display = 'block';
          sections.forEach(s => s.style.display = 'none');
 
          const target = container.querySelector('#' + this.value);
          if (target) target.style.display = 'block';
        });
       });
       });
    });




    /* ================= NEW DATA-OPTIONS DROPDOWNS ================= */
      /* ================= NEW DATA-OPTIONS DROPDOWNS ================= */


    document.querySelectorAll('.mw-dropdown-ui[data-options]').forEach(container => {
      document.querySelectorAll('.mw-dropdown-ui[data-options]').forEach(container => {


      if (container.dataset.loaded) return;
        if (container.dataset.loaded) return;
      container.dataset.loaded = "true";


      const data = JSON.parse(container.dataset.options);
        let data;
        try {
          data = JSON.parse(container.dataset.options);
        } catch (e) {
          console.error("Dropdown JSON error:", e);
          return;
        }


      const wrapper = document.createElement('div');
        const btn = document.createElement('div');
      wrapper.className = 'mod-dropdown';
        btn.className = 'mod-dropdown-btn';
        btn.textContent = "Select One";


      const btn = document.createElement('div');
        const list = document.createElement('div');
      btn.className = 'mod-dropdown-btn';
        list.className = 'mod-dropdown-list';
      btn.textContent = "Select One";


      const list = document.createElement('div');
        const output = document.createElement('div');
      list.className = 'mod-dropdown-list';
        output.className = 'mw-dropdown-output';
        output.textContent = "Select something to see details";


      const output = document.createElement('div');
        Object.entries(data)
      output.className = 'mw-dropdown-output';
          .sort((a, b) => a[1].label.localeCompare(b[1].label))
      output.textContent = "Select something to see details";
          .forEach(([key, val]) => {


      Object.entries(data)
            const item = document.createElement('div');
        .sort((a, b) => a[1].label.localeCompare(b[1].label)) // 🔥 alphabetical
            item.className = 'mod-dropdown-item';
        .forEach(([key, val]) => {
            item.textContent = val.label;


          const item = document.createElement('div');
            item.onclick = () => {
          item.className = 'mod-dropdown-item';
              btn.textContent = val.label;
          item.textContent = val.label;
              list.style.display = 'none';
              output.innerHTML = val.content;
            };


          item.onclick = () => {
            list.appendChild(item);
            btn.textContent = val.label;
           });
            list.style.display = 'none';
            output.innerHTML = val.content;
           };


           list.appendChild(item);
        btn.onclick = () => {
         });
           list.style.display = list.style.display === 'block' ? 'none' : 'block';
         };


      btn.onclick = () => {
        // 🔥 DO NOT WIPE container (this was breaking everything before)
         list.style.display = list.style.display === 'block' ? 'none' : 'block';
        container.appendChild(btn);
      };
         container.appendChild(list);
        container.appendChild(output);


      wrapper.appendChild(btn);
        container.dataset.loaded = "true";
      wrapper.appendChild(list);


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


    } catch (err) {
      console.error("COMMON.JS ERROR:", err);
    }


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

Revision as of 21:48, 21 April 2026

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

    console.log("COMMON.JS LOADED");

    try {

      /* ================= OLD SELECT DROPDOWNS ================= */

      document.querySelectorAll('.mw-dropdown-ui').forEach(container => {
        const select = container.querySelector('select');
        const sections = container.querySelectorAll('.dropdown-section');

        if (!select) return;

        select.addEventListener('change', function () {
          sections.forEach(s => s.style.display = 'none');

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


      /* ================= NEW DATA-OPTIONS DROPDOWNS ================= */

      document.querySelectorAll('.mw-dropdown-ui[data-options]').forEach(container => {

        if (container.dataset.loaded) return;

        let data;
        try {
          data = JSON.parse(container.dataset.options);
        } catch (e) {
          console.error("Dropdown JSON error:", e);
          return;
        }

        const btn = document.createElement('div');
        btn.className = 'mod-dropdown-btn';
        btn.textContent = "Select One";

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

        const output = document.createElement('div');
        output.className = 'mw-dropdown-output';
        output.textContent = "Select something to see details";

        Object.entries(data)
          .sort((a, b) => a[1].label.localeCompare(b[1].label))
          .forEach(([key, val]) => {

            const item = document.createElement('div');
            item.className = 'mod-dropdown-item';
            item.textContent = val.label;

            item.onclick = () => {
              btn.textContent = val.label;
              list.style.display = 'none';
              output.innerHTML = val.content;
            };

            list.appendChild(item);
          });

        btn.onclick = () => {
          list.style.display = list.style.display === 'block' ? 'none' : 'block';
        };

        // 🔥 DO NOT WIPE container (this was breaking everything before)
        container.appendChild(btn);
        container.appendChild(list);
        container.appendChild(output);

        container.dataset.loaded = "true";

      });

    } catch (err) {
      console.error("COMMON.JS ERROR:", err);
    }

  });
});