better light theme, add another missing features, cosmetic improvement
This commit is contained in:
parent
658868d568
commit
5a30d7e50f
@ -28,7 +28,8 @@ html, body {
|
|||||||
*, *:before, *:after {
|
*, *:before, *:after {
|
||||||
box-sizing: inherit;
|
box-sizing: inherit;
|
||||||
}
|
}
|
||||||
h1,h2,h3,h4,h5 {
|
|
||||||
|
h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +40,8 @@ h1,h2,h3,h4,h5 {
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
|
position: relative;
|
||||||
|
/*top: 1px; /* Twemoji */
|
||||||
}
|
}
|
||||||
.emoji:after {
|
.emoji:after {
|
||||||
font-variant-emoji: emoji; /* experimental feature and only in firefox :( */
|
font-variant-emoji: emoji; /* experimental feature and only in firefox :( */
|
||||||
@ -47,18 +50,19 @@ h1,h2,h3,h4,h5 {
|
|||||||
.emoji.Twemoji {
|
.emoji.Twemoji {
|
||||||
font-family: "Twemoji Mozilla Built", sans-serif;
|
font-family: "Twemoji Mozilla Built", sans-serif;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
top: 2px;
|
||||||
}
|
}
|
||||||
.emoji.Noto {
|
.emoji.Noto {
|
||||||
font-family: "Noto Color Emoji", sans-serif;
|
font-family: "Noto Color Emoji", sans-serif;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
position: relative;
|
/*left: -1px;*/
|
||||||
left: -1px;
|
top: 0px;
|
||||||
}
|
}
|
||||||
.emoji.OpenMoji {
|
.emoji.OpenMoji {
|
||||||
font-family: "OpenMojiDemoFont", sans-serif;
|
font-family: "OpenMojiDemoFont", sans-serif;
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
position: relative;
|
|
||||||
left: -2px;
|
left: -2px;
|
||||||
|
top: 0px;
|
||||||
color: #888; /* fix outline */
|
color: #888; /* fix outline */
|
||||||
}
|
}
|
||||||
.emoji.OpenMoji + .text-left-margin {
|
.emoji.OpenMoji + .text-left-margin {
|
||||||
@ -67,7 +71,7 @@ h1,h2,h3,h4,h5 {
|
|||||||
.emoji.Noto + .text-left-margin {
|
.emoji.Noto + .text-left-margin {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
.emoji.Noto + .emoji.Noto {
|
.sidebar .emoji.Noto + .emoji.Noto {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,11 +173,18 @@ table, tr, td, th {
|
|||||||
height: var(--options-height);
|
height: var(--options-height);
|
||||||
}
|
}
|
||||||
#table { }
|
#table { }
|
||||||
|
|
||||||
#fail_images {
|
#fail_images {
|
||||||
display: grid;
|
display: grid;
|
||||||
|
justify-content: left;
|
||||||
|
}
|
||||||
|
#fail_images.center,
|
||||||
|
.grid-container.reversed #fail_images.center{
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
.grid-container.reversed #fail_images {
|
||||||
|
justify-content: right;
|
||||||
|
}
|
||||||
|
|
||||||
.panel {
|
.panel {
|
||||||
display: block;
|
display: block;
|
||||||
@ -191,19 +202,21 @@ table, tr, td, th {
|
|||||||
.content {
|
.content {
|
||||||
grid-area: content;
|
grid-area: content;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
justify-content: center;
|
padding: 0px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.min { /* split feature */
|
|
||||||
|
|
||||||
|
body.mini { /* split feature */
|
||||||
width: 75%; margin: 0 auto; /* FIXME */
|
width: 75%; margin: 0 auto; /* FIXME */
|
||||||
}
|
}
|
||||||
.min .sidebar {
|
.mini .sidebar {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
.min .sidebar .panel > div {
|
.mini .sidebar .panel > div {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
}
|
}
|
||||||
.min .sidebar #options.panel {
|
.mini .sidebar #options.panel {
|
||||||
height: var(--options-height-min);
|
height: var(--options-height-min);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,7 +387,7 @@ th.table-sticky {
|
|||||||
#options.sticky + #table th.table-sticky {
|
#options.sticky + #table th.table-sticky {
|
||||||
top: calc(var(--options-height) + 0.07em); /* FIXME */
|
top: calc(var(--options-height) + 0.07em); /* FIXME */
|
||||||
}
|
}
|
||||||
.min .sidebar #options.sticky + #table th.table-sticky {
|
.mini .sidebar #options.sticky + #table th.table-sticky {
|
||||||
top: calc(var(--options-height-min) + 0.07em); /* FIXME */
|
top: calc(var(--options-height-min) + 0.07em); /* FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,10 @@ const emojiFontReplacementTable = {
|
|||||||
"💎":"Noto",
|
"💎":"Noto",
|
||||||
"🏀":"Noto",
|
"🏀":"Noto",
|
||||||
"🖌":"Noto",
|
"🖌":"Noto",
|
||||||
|
//"❌":"Noto",
|
||||||
|
"🏁":"Noto",
|
||||||
|
"🛑":"Noto",
|
||||||
|
"⛔":"Noto",
|
||||||
}
|
}
|
||||||
function emojiFont(emoji) {
|
function emojiFont(emoji) {
|
||||||
let emojiFontReplacement = emojiFontReplacementTable[emoji];
|
let emojiFontReplacement = emojiFontReplacementTable[emoji];
|
||||||
@ -179,7 +183,7 @@ function buildSummary(data) {
|
|||||||
const total = data.length;
|
const total = data.length;
|
||||||
const fails = data.filter((d) => { return !!d.fail; }).length;
|
const fails = data.filter((d) => { return !!d.fail; }).length;
|
||||||
const fails_pct = fails * 100.0 / total;
|
const fails_pct = fails * 100.0 / total;
|
||||||
return [Text(`Tests failed: ${fails} / ${total} (${fails_pct.toFixed(3)}%)`)];
|
return emojiToTag(`🧪 Tests 💥: ${fails}/${total}🏁 (⚠${fails_pct.toFixed(3)}%)`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTestResultImages(data) {
|
function buildTestResultImages(data) {
|
||||||
@ -229,7 +233,7 @@ function buildData(table, images, data, sort) {
|
|||||||
|
|
||||||
const saveToLocalStorage = debounce((key, value) => {
|
const saveToLocalStorage = debounce((key, value) => {
|
||||||
localStorage.setItem(key, value);
|
localStorage.setItem(key, value);
|
||||||
});
|
}, ()=>{}, 250);
|
||||||
const loadFromLocalStorage = (key, default_option) => {
|
const loadFromLocalStorage = (key, default_option) => {
|
||||||
const value = localStorage.getItem(key);
|
const value = localStorage.getItem(key);
|
||||||
if (isNaN(value)) {
|
if (isNaN(value)) {
|
||||||
@ -251,10 +255,14 @@ const loadFromLocalStorage = (key, default_option) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function uglyChecked(value) { // fast hack
|
||||||
|
return value ? {"checked": "checked"} : {};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
window.onload = () => {
|
window.onload = () => {
|
||||||
|
const theme = loadFromLocalStorage("rendertest_theme", "");
|
||||||
|
|
||||||
const linkElements = document.querySelectorAll('link[rel^="stylesheet"][data-theme]');
|
const linkElements = document.querySelectorAll('link[rel^="stylesheet"][data-theme]');
|
||||||
function updateLinkRel(linkElements, id) {
|
function updateLinkRel(linkElements, id) {
|
||||||
for (const link of linkElements) {
|
for (const link of linkElements) {
|
||||||
@ -269,20 +277,22 @@ window.onload = () => {
|
|||||||
for (const linkElement of linkElements) {
|
for (const linkElement of linkElements) {
|
||||||
const themeName = linkElement.getAttribute("data-theme");
|
const themeName = linkElement.getAttribute("data-theme");
|
||||||
const emojiTags = emojiToTag(linkElement.title);
|
const emojiTags = emojiToTag(linkElement.title);
|
||||||
const checked = !linkElement.rel.includes("alternate") ? {"checked": "checked"} : {};
|
let checked = uglyChecked(!linkElement.rel.includes("alternate"));
|
||||||
|
if (theme) {
|
||||||
|
checked = uglyChecked(theme === themeName);
|
||||||
|
}
|
||||||
themes.push(
|
themes.push(
|
||||||
Tag("label", null, null, [
|
Tag("label", null, null, [
|
||||||
Tag("input", {"type": "radio", "class": "theme-button", "id": themeName, "name": "theme", ...checked}, null, null,
|
Tag("input", {"type": "radio", "class": "theme-button", "id": themeName, "name": "theme", ...checked}, null, null,
|
||||||
"click", (e) => {
|
"click", (e) => {
|
||||||
updateLinkRel(linkElements, e.target.id);
|
updateLinkRel(linkElements, e.target.id);
|
||||||
|
saveToLocalStorage("rendertest_theme", e.target.id);
|
||||||
}),
|
}),
|
||||||
...emojiTags
|
...emojiTags
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function changeAnimationDuration(newDuration) {
|
function changeAnimationDuration(newDuration) {
|
||||||
document.documentElement.style.setProperty('--animation-duration', newDuration + 'ms');
|
document.documentElement.style.setProperty('--animation-duration', newDuration + 'ms');
|
||||||
}
|
}
|
||||||
@ -300,13 +310,16 @@ window.onload = () => {
|
|||||||
const switchFrequency = loadFromLocalStorage("rendertest_switchfrequency", 700);
|
const switchFrequency = loadFromLocalStorage("rendertest_switchfrequency", 700);
|
||||||
const tableSort = loadFromLocalStorage("rendertest_tablesort", false);
|
const tableSort = loadFromLocalStorage("rendertest_tablesort", false);
|
||||||
const sidebarPos = loadFromLocalStorage("rendertest_sidebarpos", "left");
|
const sidebarPos = loadFromLocalStorage("rendertest_sidebarpos", "left");
|
||||||
|
const sidebarMode = loadFromLocalStorage("rendertest_sidebarmode", "minimize");
|
||||||
|
const sidebarSize = loadFromLocalStorage("rendertest_sidebarsize", "default");
|
||||||
const vpadding = loadFromLocalStorage("rendertest_vpadding", true);
|
const vpadding = loadFromLocalStorage("rendertest_vpadding", true);
|
||||||
const all_diff = loadFromLocalStorage("rendertest_all_diff", false);
|
const all_diff = loadFromLocalStorage("rendertest_all_diff", false);
|
||||||
const sidebarMode = loadFromLocalStorage("rendertest_sidebarmode", "minimize");
|
|
||||||
const diffMode = loadFromLocalStorage("rendertest_diffmode", "click");
|
const diffMode = loadFromLocalStorage("rendertest_diffmode", "click");
|
||||||
|
const imagePosition = loadFromLocalStorage("rendertest_imageposition", "center");
|
||||||
let isPaused = loadFromLocalStorage("rendertest_paused", false);
|
let isPaused = loadFromLocalStorage("rendertest_paused", false);
|
||||||
function uglyChecked(value) { // fast hack
|
|
||||||
return value ? {"checked": "checked"} : {};
|
if (theme) {
|
||||||
|
updateLinkRel(linkElements, theme);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: simplification and bindings
|
// TODO: simplification and bindings
|
||||||
@ -423,14 +436,16 @@ window.onload = () => {
|
|||||||
Tag("span", {"class": "emoji"}, "📏"),
|
Tag("span", {"class": "emoji"}, "📏"),
|
||||||
Text(" size"),
|
Text(" size"),
|
||||||
Tag("label", null, null, [
|
Tag("label", null, null, [
|
||||||
Tag("input", {"type": "radio", "name": "sidebar-size", "value": "always", "checked": "checked"}, null, null, "input", (e) => {
|
Tag("input", {"type": "radio", "name": "sidebar-size", "value": "default", ...uglyChecked(sidebarSize == "default")}, null, null, "input", (e) => {
|
||||||
document.body.classList.toggle("min");
|
document.body.classList.toggle("mini");
|
||||||
|
saveToLocalStorage("rendertest_sidebarsize", e.target.value);
|
||||||
}),
|
}),
|
||||||
Text(" default")
|
Text(" default")
|
||||||
]),
|
]),
|
||||||
Tag("label", null, null, [
|
Tag("label", null, null, [
|
||||||
Tag("input", {"type": "radio", "name": "sidebar-size", "value": "min"}, null, null, "input", (e) => {
|
Tag("input", {"type": "radio", "name": "sidebar-size", "value": "mini", ...uglyChecked(sidebarSize == "mini")}, null, null, "input", (e) => {
|
||||||
document.body.classList.toggle("min");
|
document.body.classList.toggle("mini");
|
||||||
|
saveToLocalStorage("rendertest_sidebarsize", e.target.value);
|
||||||
}),
|
}),
|
||||||
Text(" mini")
|
Text(" mini")
|
||||||
])
|
])
|
||||||
@ -443,11 +458,17 @@ window.onload = () => {
|
|||||||
Text(" Image position")
|
Text(" Image position")
|
||||||
]),
|
]),
|
||||||
Tag("label", null, null, [
|
Tag("label", null, null, [
|
||||||
Tag("input", {"type": "radio", "name": "image_position", "value": "relative", "disabled": "disabled"}),
|
Tag("input", {"type": "radio", "name": "image_position", "value": "relative", ...uglyChecked(imagePosition === "relative")}, null, null, "input", (e) => {
|
||||||
|
images.classList.toggle("center");
|
||||||
|
saveToLocalStorage("rendertest_imageposition", e.target.value);
|
||||||
|
}),
|
||||||
Text(" relative")
|
Text(" relative")
|
||||||
]),
|
]),
|
||||||
Tag("label", null, null, [
|
Tag("label", null, null, [
|
||||||
Tag("input", {"type": "radio", "name": "image_position", "value": "center", "checked": "checked"}),
|
Tag("input", {"type": "radio", "name": "image_position", "value": "center", ...uglyChecked(imagePosition === "center")}, null, null, "input", (e) => {
|
||||||
|
images.classList.toggle("center");
|
||||||
|
saveToLocalStorage("rendertest_imageposition", e.target.value);
|
||||||
|
}),
|
||||||
Text(" center ")
|
Text(" center ")
|
||||||
]),
|
]),
|
||||||
Tag("b", null, null, [
|
Tag("b", null, null, [
|
||||||
@ -503,7 +524,9 @@ window.onload = () => {
|
|||||||
Tag("h1", null, "Rendertest report"),
|
Tag("h1", null, "Rendertest report"),
|
||||||
Tag("h2", null, "Summary"),
|
Tag("h2", null, "Summary"),
|
||||||
Tag("div", {"id": "summary"}, null, [...buildSummary(data)]),
|
Tag("div", {"id": "summary"}, null, [...buildSummary(data)]),
|
||||||
Tag("h2", null, "Images of things that are not perfect"),
|
Tag("h2", null, "Images of things that are not perfect ", [
|
||||||
|
Tag("span", {"class": "emoji"}, "⤵")
|
||||||
|
]),
|
||||||
images = Tag("div", {"id": "fail_images", "class": "vpadding"})
|
images = Tag("div", {"id": "fail_images", "class": "vpadding"})
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
@ -512,9 +535,18 @@ window.onload = () => {
|
|||||||
buildData(table, images, data, tableSort);
|
buildData(table, images, data, tableSort);
|
||||||
|
|
||||||
// TODO: remove this
|
// TODO: remove this
|
||||||
if (sidebarPos == "right") {
|
if (sidebarPos === "right") {
|
||||||
gridContainer.classList.toggle("reversed");
|
gridContainer.classList.toggle("reversed");
|
||||||
}
|
}
|
||||||
|
if (sidebarMode === "always") {
|
||||||
|
sidebarOptions.classList.toggle("sticky");
|
||||||
|
}
|
||||||
|
if (sidebarSize === "mini") {
|
||||||
|
document.body.classList.toggle("mini");
|
||||||
|
}
|
||||||
|
if (imagePosition === "center") {
|
||||||
|
images.classList.toggle("center");
|
||||||
|
}
|
||||||
if (!vpadding) {
|
if (!vpadding) {
|
||||||
images.classList.toggle("vpadding");
|
images.classList.toggle("vpadding");
|
||||||
}
|
}
|
||||||
@ -523,12 +555,10 @@ window.onload = () => {
|
|||||||
//vpaddin_input.disabled = !vpaddin_input.disabled;
|
//vpaddin_input.disabled = !vpaddin_input.disabled;
|
||||||
//images.classList.toggle("vpadding");
|
//images.classList.toggle("vpadding");
|
||||||
}
|
}
|
||||||
if (diffMode == "separate") {
|
if (diffMode === "separate") {
|
||||||
images.classList.toggle("diff_separate");
|
images.classList.toggle("diff_separate");
|
||||||
}
|
}
|
||||||
if (sidebarMode == "always") {
|
|
||||||
sidebarOptions.classList.toggle("sticky");
|
|
||||||
}
|
|
||||||
changeAnimationDuration(isPaused ? 0 : numberInput.value);
|
changeAnimationDuration(isPaused ? 0 : numberInput.value);
|
||||||
|
|
||||||
// stop animation when not in the viewport
|
// stop animation when not in the viewport
|
||||||
|
@ -5,9 +5,9 @@ body {
|
|||||||
|
|
||||||
.panel {
|
.panel {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
border: #EEE 1px solid;
|
border: #e5f0ff 1px solid;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
color: cornflowerblue;
|
color: #2d6bdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.meta-block h3 {
|
.meta-block h3 {
|
||||||
@ -17,12 +17,12 @@ body {
|
|||||||
|
|
||||||
table {
|
table {
|
||||||
color: #eb4300;
|
color: #eb4300;
|
||||||
border: #e100ca 1px solid;
|
border: #ffa6f6 1px solid;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
th {
|
th {
|
||||||
background: oklch(62.5% 0.291 308.12);
|
background: oklch(62.5% 0.291 308.12);
|
||||||
background: linear-gradient(0deg,#b540ff,cornflowerblue);
|
background: linear-gradient(0deg,#d99dff,#c4d7f9);
|
||||||
/* box-shadow: 3px 3px 3px 3px rgba(0, 0, 0, 0.5);*/
|
/* box-shadow: 3px 3px 3px 3px rgba(0, 0, 0, 0.5);*/
|
||||||
}
|
}
|
||||||
a, a:visited {
|
a, a:visited {
|
||||||
|
Loading…
Reference in New Issue
Block a user