User:Canadabonk/sandbox.js: Difference between revisions

From TestWiki
Content added Content deleted
No edit summary
No edit summary
Line 45: Line 45:
darkmodevars[x] = tohex(cosmostweaksCSS[1].style.getPropertyValue(x));
darkmodevars[x] = tohex(cosmostweaksCSS[1].style.getPropertyValue(x));
}
}
const newVarsCSS = `
:root {
${lightmodevars}
}
.cosmostweaks-darkmode {
${darkmodevars}
}`;
const newVars = mw.util.addCSS(newVarsCSS);
function createinput(color) {
function createinput(color) {
Line 63: Line 73:
colorlist += x + ": " + list[x] + '\n';
colorlist += x + ": " + list[x] + '\n';
}
}
console.log(colorlist);
$(name).text(colorlist);
$(name).text(colorlist);
}
}
Line 76: Line 85:
${CSSvarsRows()}
${CSSvarsRows()}
</table>
</table>
<table>
<tr><td style="width:50%">
<p>Light mode colors:</p>
<p>Light mode colors:</p>
<pre class="lightmodevars">
<pre class="lightmodevars">
</pre>
</pre></td>
<p>Dark mode colors:</p>
<td><p>Dark mode colors:</p>
<pre class="darkmodevars">
<pre class="darkmodevars">
</pre>
</pre></td></tr></table>
`);
`);
Line 89: Line 100:
variable = $(e.target).closest('tr').attr('data-row');
variable = $(e.target).closest('tr').attr('data-row');
console.log(color);
$(e.target).attr('value', color);
$(e.target).attr('value', color);
$(e.target).siblings('input').attr('value', color);
$(e.target).siblings('input').attr('value', color);
Line 101: Line 111:
printcolors(darkmodevars, ".darkmodevars");
printcolors(darkmodevars, ".darkmodevars");
}
}
$(newVars.ownerNode).html(newVarsCSS);
});
});
printcolors(lightmodevars);
printcolors(lightmodevars, ".lightmodevars");
printcolors(darkmodevars);
printcolors(darkmodevars, ".darkmodevars");
}
}
});
});

Revision as of 18:31, 26 June 2024

$(function(){
	if ($('#cosmostweaks-coloreditor').length) {
		mw.util.addCSS(`
			#cosmostweaks-coloreditor {
				background-color: #eee;
				color: black;
				padding:10px;
				color-scheme:light;
			}
			#cosmostweaks-coloreditor td, #cosmostweaks-coloreditor th {
				border:1px solid black;
			}
			#cosmostweaks-coloreditor th {
				background-color:lightgrey;
			}
		`);
		
		const CSSvarsList = [
			'--main-background-color', 
			'--content-background-color', 
			'--text-color', 
			'--link-color', 
			'--banner-color', 
			'--banner-text-color', 
			'--header-color', 
			'--header-text-color', 
			'--button-color', 
			'--button-text-color', 
			'--footer-color'];
			
		const cosmostweaksCSS = [];
		$.each(document.styleSheets, function(index, sheet){
			const source = sheet.ownerNode.href || 'none';
			if (source.match('Canadabonk')) {
				cosmostweaksCSS.push(sheet.cssRules[0]);
				cosmostweaksCSS.push(sheet.cssRules[1]);	
			}
		});
		
		const lightmodevars = {};
		const darkmodevars = {};
		
		for (const x of CSSvarsList) {
			lightmodevars[x] = tohex(cosmostweaksCSS[0].style.getPropertyValue(x));
			darkmodevars[x] = tohex(cosmostweaksCSS[1].style.getPropertyValue(x));
		}
		
		const newVarsCSS = `
			:root {
				${lightmodevars}
			}
			.cosmostweaks-darkmode {
				${darkmodevars}
			}`;
		
		const newVars = mw.util.addCSS(newVarsCSS);
		
		function createinput(color) {
			return `<input type="color" value="${color}"><input type="text" value="${color}">`;
		}
		
		function CSSvarsRows() {
			text = "";
			for (const x of CSSvarsList) {
				text += `<tr data-row="${x}"><th>${x}</th><td class="lightcol">${createinput(lightmodevars[x])}</td><td class="darkcol">${createinput(darkmodevars[x])}</td></tr>\n`;
			}
			return text;
		}
		
		function printcolors(list, name) {
			colorlist = "";
			for (const x in list) {
				colorlist += x + ": " + list[x] + '\n';
			}
			$(name).text(colorlist);
		}
		
		$('#cosmostweaks-coloreditor').html(`
			<h3 style="margin:0;color:black">Use this to visualise what a color scheme will look like!</h3>
			<p>Anything done here is not saved, this is just for preview purposes.<br>
			Paste the resulting code into your "Mediawiki:Gadget-cosmostweaks.css" to apply it.<br>
			This tool can only work with hexcodes (like "#000000"). Swap them out for RGBA values with opacity in the CSS page, if desired.</p>
			<table style="width:100%;border-collapse:collapse">
				<tr><td style="width:30%"></td><th>Light mode</th><th>Dark mode</th></tr>
				${CSSvarsRows()}
			</table>
			<table>
			<tr><td style="width:50%">
			<p>Light mode colors:</p>
			<pre class="lightmodevars">
			</pre></td>
			<td><p>Dark mode colors:</p>
			<pre class="darkmodevars">
			</pre></td></tr></table>
		`);
		
		$('#cosmostweaks-coloreditor input').change(e => {
			const 
			color = e.target.value,
			variable = $(e.target).closest('tr').attr('data-row');
			
			$(e.target).attr('value', color);
			$(e.target).siblings('input').attr('value', color);
			switch($(e.target).parent().attr('class')) {
				case 'lightcol':
					lightmodevars[variable] = color;
					printcolors(lightmodevars, ".lightmodevars");
					break;
				case 'darkcol':
					darkmodevars[variable] = color;
					printcolors(darkmodevars, ".darkmodevars");
			}
			$(newVars.ownerNode).html(newVarsCSS);
		});
		
		printcolors(lightmodevars, ".lightmodevars");
		printcolors(darkmodevars, ".darkmodevars");
	}
});

function tohex(color){
	if (color.match(/^rgb/)) {
		rgb = color.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
		return (rgb && rgb.length === 4) ? "#" +
		("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
		("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
		("0" + parseInt(rgb[3],10).toString(16)).slice(-2) : '';
	} else if (color.length == 4 && color.match(/^#.../)) {
		return "#" + color[1] + color[1] + color[2] + color[2] + color[3] + color[3];
	} else {
		return color;
	}
}