Skip to content

Commit 42befb0

Browse files
authored
Merge pull request #203 from aternosorg/fix-firefox-column-issue
Fix firefox column issue
2 parents d9eee9a + a2c6400 commit 42befb0

2 files changed

Lines changed: 90 additions & 17 deletions

File tree

web/public/css/mclogs.css

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
--max-width-content: min(100%, calc(var(--max-width)) - var(--page-padding) * 2);
7575
--radius: 12px;
7676
--scrollbar-height: 8px;
77+
--browser: unset;
7778
scroll-behavior: smooth;
7879
}
7980

@@ -154,6 +155,10 @@ body.setting-no-wrap .log-inner .level {
154155
white-space: pre;
155156
}
156157

158+
body.setting-no-wrap .log-inner .collapsed-lines-count {
159+
justify-content: flex-start;
160+
}
161+
157162
a {
158163
color: inherit;
159164
text-decoration: none;
@@ -997,6 +1002,53 @@ main {
9971002
color: var(--text);
9981003
}
9991004

1005+
/* Firefox fallback: use table layout instead of grid */
1006+
@supports (-moz-appearance: none) {
1007+
:root {
1008+
--browser: 'firefox';
1009+
}
1010+
.log-inner {
1011+
display: table;
1012+
table-layout: fixed;
1013+
width: 100%;
1014+
}
1015+
1016+
.log-inner .entry,
1017+
.log-inner .collapsed-lines {
1018+
display: table-row;
1019+
}
1020+
1021+
.log-inner .line-number-container,
1022+
.log-inner .collapsed-lines > div:first-child {
1023+
display: table-cell;
1024+
width: 3.6rem;
1025+
}
1026+
1027+
@media (max-width: 600px) {
1028+
.log-inner .line-number-container {
1029+
width: 2.7rem;
1030+
}
1031+
}
1032+
1033+
.log-inner .line-content,
1034+
.log-inner .collapsed-lines-count {
1035+
display: table-cell;
1036+
}
1037+
1038+
.log-inner .collapsed-lines-count {
1039+
text-align: center;
1040+
vertical-align: middle;
1041+
}
1042+
1043+
body.setting-no-wrap .log {
1044+
overflow-x: auto;
1045+
}
1046+
1047+
body.setting-no-wrap .log-inner {
1048+
table-layout: auto;
1049+
}
1050+
}
1051+
10001052
.collapsed-lines {
10011053
display: contents;
10021054
cursor: pointer;

web/public/js/log.js

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function collapseAllErrors() {
8989
}
9090

9191
function uncollapseAllErrors() {
92-
document.querySelectorAll('.entry-no-error').forEach(line => line.style.display = "contents");
92+
document.querySelectorAll('.entry-no-error').forEach(line => line.style.removeProperty("display"));
9393
document.querySelectorAll('.collapsed-lines').forEach(collapsed => collapsed.remove());
9494
}
9595

@@ -101,7 +101,7 @@ function handleCollapsedClick(e) {
101101
position = positionElement.getBoundingClientRect().top - window.scrollY;
102102
}
103103
for (let i = parseInt(collapsed.dataset.start); i <= parseInt(collapsed.dataset.end); i++) {
104-
document.getElementById(`L${i}`).parentElement.parentElement.style.display = "contents";
104+
document.getElementById(`L${i}`).parentElement.parentElement.style.removeProperty("display");
105105
}
106106
if (positionElement) {
107107
window.scrollTo({
@@ -157,27 +157,16 @@ if (typeof BroadcastChannel !== "undefined") {
157157
settingsChannel.onmessage = (e) => {
158158
if (e.data.type === "settings-updated") {
159159
for (const checkbox of settingCheckboxes) {
160-
let bodyClass = checkbox.dataset.bodyClass;
161-
if (e.data.settings[checkbox.dataset.key]) {
162-
document.body.classList.add(bodyClass);
163-
checkbox.checked = true;
164-
} else {
165-
document.body.classList.remove(bodyClass);
166-
checkbox.checked = false;
167-
}
160+
checkbox.checked = !!e.data.settings[checkbox.dataset.key];
161+
applySetting(checkbox);
168162
}
169163
}
170164
};
171165
}
172166

173167
function handleSettingChange(e) {
174168
let checkbox = e.target;
175-
let bodyClass = checkbox.dataset.bodyClass;
176-
if (checkbox.checked) {
177-
document.body.classList.add(bodyClass);
178-
} else {
179-
document.body.classList.remove(bodyClass);
180-
}
169+
applySetting(checkbox);
181170
saveSettings();
182171
if (settingsChannel) {
183172
settingsChannel.postMessage({
@@ -187,6 +176,20 @@ function handleSettingChange(e) {
187176
}
188177
}
189178

179+
function applySetting(checkbox) {
180+
let bodyClass = checkbox.dataset.bodyClass;
181+
if (checkbox.checked) {
182+
document.body.classList.add(bodyClass);
183+
} else {
184+
document.body.classList.remove(bodyClass);
185+
}
186+
switch (checkbox.dataset.key) {
187+
case "floatingScrollbar":
188+
initFloatingScrollbar();
189+
break;
190+
}
191+
}
192+
190193
function getCurrentSettings() {
191194
const data = {};
192195
for (const checkbox of settingCheckboxes) {
@@ -249,8 +252,18 @@ async function handleDeleteButtonClick() {
249252
}
250253

251254
/* floating scroll bar */
255+
const browser = getComputedStyle(document.body)
256+
.getPropertyValue("--browser")
257+
.replaceAll(/['"]/g, '')
258+
.trim()
259+
.toLowerCase();
252260
const floatingScrollbar = document.querySelector(".floating-scrollbar");
253-
const logContainer = document.querySelector(".log-inner");
261+
let logContainer = null;
262+
if (browser === "firefox") {
263+
logContainer = document.querySelector(".log");
264+
} else {
265+
logContainer = document.querySelector(".log-inner");
266+
}
254267

255268
if (floatingScrollbar && logContainer) {
256269
updateFloatingScrollbarWidths();
@@ -275,6 +288,14 @@ function syncScroll(source, target) {
275288
}
276289
}
277290

291+
function initFloatingScrollbar() {
292+
if (!floatingScrollbar || !logContainer) {
293+
return;
294+
}
295+
updateFloatingScrollbarWidths();
296+
syncScroll(logContainer, floatingScrollbar);
297+
}
298+
278299
function updateFloatingScrollbarWidths() {
279300
floatingScrollbar.style.setProperty(
280301
"--floating-scrollbar-width",

0 commit comments

Comments
 (0)