MediaWiki:Common.js: Difference between revisions
MediaWiki interface page
More actions
Blanked the page Tags: Blanking Manual revert |
No edit summary |
||
| Line 1: | Line 1: | ||
mw.loader.using(['mediawiki.util']).then(function () { | |||
function injectThemeOption(container) { | |||
if (document.getElementById('lt-theme-test')) return; | |||
// Portlet wrapper | |||
const wrapper = document.createElement('div'); | |||
wrapper.id = 'lt-theme-test'; | |||
wrapper.className = 'mw-portlet citizen-menu'; | |||
// Heading | |||
const heading = document.createElement('div'); | |||
heading.className = 'citizen-menu__heading'; | |||
heading.textContent = 'Theme'; | |||
// Content wrapper | |||
const content = document.createElement('div'); | |||
content.className = 'citizen-menu__content'; | |||
// UL | |||
const list = document.createElement('ul'); | |||
list.className = 'citizen-menu__content-list'; | |||
// LI | |||
const item = document.createElement('li'); | |||
item.className = 'mw-list-item mw-list-item-js'; | |||
// Inner div (matches Citizen structure) | |||
const innerDiv = document.createElement('div'); | |||
// FORM (this is important for spacing) | |||
const form = document.createElement('form'); | |||
// Radio wrapper | |||
const radioWrapper = document.createElement('div'); | |||
radioWrapper.className = 'citizen-client-prefs-radio'; | |||
// Input | |||
const input = document.createElement('input'); | |||
input.type = 'radio'; | |||
input.name = 'lt-theme-group'; | |||
input.id = 'lt-theme-default'; | |||
input.className = 'citizen-client-prefs-radio__input'; | |||
// Icon | |||
const icon = document.createElement('span'); | |||
icon.className = 'citizen-client-prefs-radio__icon'; | |||
// Label | |||
const label = document.createElement('label'); | |||
label.className = 'citizen-client-prefs-radio__label'; | |||
label.htmlFor = 'lt-theme-default'; | |||
label.textContent = 'Velvet Room'; | |||
// Assemble radio | |||
radioWrapper.appendChild(input); | |||
radioWrapper.appendChild(icon); | |||
radioWrapper.appendChild(label); | |||
// Assemble hierarchy | |||
form.appendChild(radioWrapper); | |||
innerDiv.appendChild(form); | |||
item.appendChild(innerDiv); | |||
list.appendChild(item); | |||
content.appendChild(list); | |||
wrapper.appendChild(heading); | |||
wrapper.appendChild(content); | |||
container.appendChild(wrapper); | |||
} | |||
const observer = new MutationObserver(function () { | |||
const container = document.querySelector('.citizen-preferences-content'); | |||
if (container) { | |||
injectThemeOption(container); | |||
} | |||
}); | |||
observer.observe(document.body, { childList: true, subtree: true }); | |||
}); | |||
Revision as of 16:50, 20 February 2026
mw.loader.using(['mediawiki.util']).then(function () {
function injectThemeOption(container) {
if (document.getElementById('lt-theme-test')) return;
// Portlet wrapper
const wrapper = document.createElement('div');
wrapper.id = 'lt-theme-test';
wrapper.className = 'mw-portlet citizen-menu';
// Heading
const heading = document.createElement('div');
heading.className = 'citizen-menu__heading';
heading.textContent = 'Theme';
// Content wrapper
const content = document.createElement('div');
content.className = 'citizen-menu__content';
// UL
const list = document.createElement('ul');
list.className = 'citizen-menu__content-list';
// LI
const item = document.createElement('li');
item.className = 'mw-list-item mw-list-item-js';
// Inner div (matches Citizen structure)
const innerDiv = document.createElement('div');
// FORM (this is important for spacing)
const form = document.createElement('form');
// Radio wrapper
const radioWrapper = document.createElement('div');
radioWrapper.className = 'citizen-client-prefs-radio';
// Input
const input = document.createElement('input');
input.type = 'radio';
input.name = 'lt-theme-group';
input.id = 'lt-theme-default';
input.className = 'citizen-client-prefs-radio__input';
// Icon
const icon = document.createElement('span');
icon.className = 'citizen-client-prefs-radio__icon';
// Label
const label = document.createElement('label');
label.className = 'citizen-client-prefs-radio__label';
label.htmlFor = 'lt-theme-default';
label.textContent = 'Velvet Room';
// Assemble radio
radioWrapper.appendChild(input);
radioWrapper.appendChild(icon);
radioWrapper.appendChild(label);
// Assemble hierarchy
form.appendChild(radioWrapper);
innerDiv.appendChild(form);
item.appendChild(innerDiv);
list.appendChild(item);
content.appendChild(list);
wrapper.appendChild(heading);
wrapper.appendChild(content);
container.appendChild(wrapper);
}
const observer = new MutationObserver(function () {
const container = document.querySelector('.citizen-preferences-content');
if (container) {
injectThemeOption(container);
}
});
observer.observe(document.body, { childList: true, subtree: true });
});