document theme builder

This commit is contained in:
Geoff Doty 2021-10-16 02:04:57 -04:00
parent 667b210708
commit 693e5f23c7
1 changed files with 29 additions and 13 deletions

View File

@ -1,7 +1,8 @@
///////////////////////////////////////////////
// Tweak Example Settings
// Grayscale Theme Builder
///////////////////////////////////////////////
// query helper
const $ = document.querySelector.bind(document);
function HEXToRGB(hex) {
@ -62,12 +63,15 @@ function RGBToHSL(r,g,b) {
};
}
function update() {
// refresh current page theme
function refresh() {
const form = $('#settings');
// convert hex-to-rbg-to-hsl
const rgb = HEXToRGB(form.elements['theme'].value);
const hsl = RGBToHSL(rgb.r, rgb.g, rgb.b);
// build theme string
const theme = String(`
:root {
--Hsl: ${hsl.h};
@ -80,11 +84,13 @@ function update() {
--radius: ${form.elements['radius'].value}rem;
}`).replace(/\s/g, '');
// override :root to update page theme
$('#dynamic').innerHTML = theme;
return theme;
}
// download custom grayscaled theme
function download(css) {
const filename = `grayscaled.css`;
@ -95,25 +101,34 @@ function download(css) {
el.click();
}
// page download button
$('input[type="submit"]').addEventListener('click', (e) => {
e.preventDefault();
const theme = update();
// get current theme
const theme = refresh();
function css_text(x) {
// get style rules as text
function getText(x) {
// exclude :root theme vars
if(x.selectorText !== ':root') {
return x.cssText;
}
}
var css = document.getElementById('grayscale');
var content = Array.prototype.map.call(css.sheet.cssRules, css_text).join('\n');
// get grayscale stylesheet as dom object
var css = $('#grayscale');
const grayscaled = `${theme}${content}`.replace(/\s/g, '');
// convert stylesheet dom object to string
var style = Array.prototype.map.call(css.sheet.cssRules, getText).join('\n');
// build custom grayscaled theme & minify
const grayscaled = `${theme}${style}`.replace(/\s/g, '');
download(grayscaled);
});
// toggle light / dark mode
$('#mode').addEventListener('click', () => {
const attr = $('html').getAttribute('data-theme');
@ -124,9 +139,10 @@ $('#mode').addEventListener('click', () => {
}
});
$('#radius').addEventListener('click', update);
$('#font').addEventListener('click', update);
$('#size').addEventListener('click', update);
$('#spacing').addEventListener('click', update);
$('#line').addEventListener('click', update);
$('#theme').addEventListener('change', update);
// refresh page theme on changes
$('#radius').addEventListener('click', refresh);
$('#font').addEventListener('click', refresh);
$('#size').addEventListener('click', refresh);
$('#spacing').addEventListener('click', refresh);
$('#line').addEventListener('click', refresh);
$('#theme').addEventListener('change', refresh);