MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 25: | Line 25: | ||
/* ================= DROPDOWN SYSTEM ================= */ | /* ================= DROPDOWN SYSTEM ================= */ | ||
let selectedLeft = null; | let selectedLeft = null; | ||
let selectedRight = null; | let selectedRight = null; | ||
function createDropdown(container, label, options, side) { | function createDropdown(container, label, options, side) { | ||
const wrapper = document.createElement('div'); | |||
wrapper.className = 'custom-dropdown'; | |||
const button = document.createElement('button'); | const button = document.createElement('button'); | ||
button.className = 'custom-dropdown-btn'; | |||
button.textContent = label; | |||
const list = document.createElement('div'); | const list = document.createElement('div'); | ||
list.className = 'custom-dropdown-list'; | |||
list. | |||
Object.keys(options).forEach(key => { | Object.keys(options).forEach(key => { | ||
const item = document.createElement('div'); | const item = document.createElement('div'); | ||
item.className = 'custom-dropdown-item'; | |||
item.textContent = options[key]; | item.textContent = options[key]; | ||
item.onclick = function () { | item.onclick = function () { | ||
button.textContent = options[key]; | button.textContent = options[key]; | ||
if (side === 'left') selectedLeft = key; | if (side === 'left') selectedLeft = key; | ||
if (side === 'right') selectedRight = key; | if (side === 'right') selectedRight = key; | ||
wrapper.classList.remove('open'); | |||
updateResult(); | updateResult(); | ||
}; | }; | ||
| Line 53: | Line 59: | ||
button.onclick = function () { | button.onclick = function () { | ||
wrapper.classList.toggle('open'); | |||
}; | }; | ||
wrapper.appendChild(button); | |||
wrapper.appendChild(list); | |||
container.innerHTML = ''; | container.innerHTML = ''; | ||
container.appendChild( | container.appendChild(wrapper); | ||
} | } | ||
function updateResult() { | function updateResult() { | ||
const result = document.querySelector( | const result = document.querySelector('[data-combo-result]'); | ||
if (!result) return; | if (!result) return; | ||
if (!selectedLeft || !selectedRight) { | if (!selectedLeft || !selectedRight) { | ||
result.style.display = | result.style.display = 'none'; | ||
return; | return; | ||
} | } | ||
result.style.display = | result.style.display = 'block'; | ||
const | const key = selectedLeft + "|" + selectedRight; | ||
const data = JSON.parse(result.dataset.combo || "{}"); | const data = JSON.parse(result.dataset.combo || "{}"); | ||
result.innerHTML = data[ | result.innerHTML = data[key] || "No data for this combination."; | ||
} | } | ||
/* | /* 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]'); | ||
const right = group.querySelector('[data-right]'); | const right = group.querySelector('[data-right]'); | ||
if (left) | 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"); | |||
if (right) | |||
}); | }); | ||
}); | }); | ||
}); | }); | ||
Revision as of 18:46, 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();
});
/* ================= DROPDOWN SYSTEM ================= */
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';
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;
wrapper.classList.remove('open');
updateResult();
};
list.appendChild(item);
});
button.onclick = function () {
wrapper.classList.toggle('open');
};
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.";
}
/* 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) createDropdown(right, right.dataset.label, JSON.parse(right.dataset.options), "right");
});
});
});