미디어위키:Gadget-CSSVars.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
11번째 줄: 11번째 줄:
}
}


const root = document.documentElement;
const light = {};
const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const dark = {};
const common = {};


Object.entries(vars).forEach(([key, value]) => {
Object.entries(vars).forEach(([key, value]) => {
let targetKey = key;
let apply = true;
if (key.endsWith('-light')) {
if (key.endsWith('-light')) {
targetKey = key.replace(/-light$/, '');
light[key.replace(/-light$/, '')] = value;
apply = !isDark;
} else if (key.endsWith('-dark')) {
} else if (key.endsWith('-dark')) {
targetKey = key.replace(/-dark$/, '');
dark[key.replace(/-dark$/, '')] = value;
apply = isDark;
} else {
common[key] = value;
}
}
});
const makeVars = (obj) =>
Object.entries(obj)
.map(([k, v]) => `--${k}: ${v} !important;`)
.join('');


if (!apply) return;
let css = '';


/* 🔥 !important 강제 */
if (Object.keys(common).length) {
root.style.setProperty(`--${targetKey}`, value, 'important');
css += `:root{${makeVars(common)}}`;
});
}
 
if (Object.keys(light).length) {
css += `
@media (prefers-color-scheme: light){
:root{${makeVars(light)}}
}`;
}
 
if (Object.keys(dark).length) {
css += `
@media (prefers-color-scheme: dark){
:root{${makeVars(dark)}}
}`;
}
 
if (css.trim()) {
mw.util.addCSS(css);
}
});
});

2026년 1월 28일 (수) 18:28 판

mw.hook('wikipage.content').add(function ($content) {
	const el = $content.find('.mw-css-vars').first();
	if (!el.length) return;

	let vars;
	try {
		vars = JSON.parse(el.attr('data-vars'));
	} catch (e) {
		console.error('PageCSSVars: invalid JSON', e);
		return;
	}

	const light = {};
	const dark = {};
	const common = {};

	Object.entries(vars).forEach(([key, value]) => {
		if (key.endsWith('-light')) {
			light[key.replace(/-light$/, '')] = value;
		} else if (key.endsWith('-dark')) {
			dark[key.replace(/-dark$/, '')] = value;
		} else {
			common[key] = value;
		}
	});

	const makeVars = (obj) =>
		Object.entries(obj)
			.map(([k, v]) => `--${k}: ${v} !important;`)
			.join('');

	let css = '';

	if (Object.keys(common).length) {
		css += `:root{${makeVars(common)}}`;
	}

	if (Object.keys(light).length) {
		css += `
@media (prefers-color-scheme: light){
	:root{${makeVars(light)}}
}`;
	}

	if (Object.keys(dark).length) {
		css += `
@media (prefers-color-scheme: dark){
	:root{${makeVars(dark)}}
}`;
	}

	if (css.trim()) {
		mw.util.addCSS(css);
	}
});