mirror of
https://github.com/GuySandler/CanvasRefined.git
synced 2026-09-22 21:05:10 +02:00
weird bug fix
This commit is contained in:
parent
759deeed75
commit
cedb83d3d3
@ -407,6 +407,14 @@ let reminderCheck = null;
|
|||||||
let betterSidebarLoading = false;
|
let betterSidebarLoading = false;
|
||||||
let dashboardReadyTimer = null;
|
let dashboardReadyTimer = null;
|
||||||
let sidebarReadyTimer = null;
|
let sidebarReadyTimer = null;
|
||||||
|
// Signature of the dashboard card set last time we ran the full setup pass.
|
||||||
|
// The MutationObserver in checkDashboardReady fires on every childList change
|
||||||
|
// in the document — including the ones our own setup pass (loadCardAssignments,
|
||||||
|
// customizeCards, etc.) causes. Without a guard, that re-triggers the observer
|
||||||
|
// and re-runs the whole pass every animation frame (an infinite reflow loop).
|
||||||
|
// We only need to re-run when Canvas actually changes the dashboard cards, so
|
||||||
|
// we skip the heavy pass whenever the card set is unchanged.
|
||||||
|
let lastDashboardCardSignature = null;
|
||||||
let sidebarBadgeObserver = null;
|
let sidebarBadgeObserver = null;
|
||||||
let sidebarBadgeSyncTimer = null;
|
let sidebarBadgeSyncTimer = null;
|
||||||
let sidebarBadgeWatchRetries = 0;
|
let sidebarBadgeWatchRetries = 0;
|
||||||
@ -1195,6 +1203,20 @@ function checkDashboardReady() {
|
|||||||
const c = document.querySelector("#DashboardCard_Container");
|
const c = document.querySelector("#DashboardCard_Container");
|
||||||
if (c) {
|
if (c) {
|
||||||
let cards = document.querySelectorAll(".ic-DashboardCard");
|
let cards = document.querySelectorAll(".ic-DashboardCard");
|
||||||
|
// Build a cheap signature of the current card set. The setup
|
||||||
|
// pass below mutates the cards' internals (assignment rows,
|
||||||
|
// grades, etc.) but never adds/removes the .ic-DashboardCard
|
||||||
|
// elements themselves, so the signature stays stable across
|
||||||
|
// our own mutations. It only changes when Canvas re-renders the
|
||||||
|
// dashboard (cards added/removed/reordered/replaced). Skipping
|
||||||
|
// when it's unchanged breaks the self-retriggering reflow loop.
|
||||||
|
let signature = cards.length + "";
|
||||||
|
for (let i = 0; i < cards.length; i++) {
|
||||||
|
const link = cards[i].querySelector(".ic-DashboardCard__link");
|
||||||
|
signature += "|" + (link ? link.getAttribute("href") : "");
|
||||||
|
}
|
||||||
|
if (signature !== lastDashboardCardSignature) {
|
||||||
|
lastDashboardCardSignature = signature;
|
||||||
changeGradientCards();
|
changeGradientCards();
|
||||||
setupCardAssignments();
|
setupCardAssignments();
|
||||||
loadCardAssignments();
|
loadCardAssignments();
|
||||||
@ -1205,6 +1227,7 @@ function checkDashboardReady() {
|
|||||||
showUpdateMsg();
|
showUpdateMsg();
|
||||||
createNasaInfoOverlay();
|
createNasaInfoOverlay();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const rightSide = document.querySelector("#right-side");
|
const rightSide = document.querySelector("#right-side");
|
||||||
if (rightSide && !rightSide.querySelector(".canvasrefined-todosidebar")) {
|
if (rightSide && !rightSide.querySelector(".canvasrefined-todosidebar")) {
|
||||||
@ -5158,7 +5181,14 @@ function applyAestheticChanges() {
|
|||||||
if (options.cardRoundness !== undefined && options.cardRoundness !== 5) style.textContent += `.ic-DashboardCard {border-radius: ${options.cardRoundness}px!important;}`;
|
if (options.cardRoundness !== undefined && options.cardRoundness !== 5) style.textContent += `.ic-DashboardCard {border-radius: ${options.cardRoundness}px!important;}`;
|
||||||
if (options.cardSpacing !== undefined && options.cardSpacing !== 0) style.textContent += `.ic-DashboardCard {margin-right: ${options.cardSpacing / 2}px!important; margin-bottom: ${options.cardSpacing / 2}px!important;}`;
|
if (options.cardSpacing !== undefined && options.cardSpacing !== 0) style.textContent += `.ic-DashboardCard {margin-right: ${options.cardSpacing / 2}px!important; margin-bottom: ${options.cardSpacing / 2}px!important;}`;
|
||||||
if (options.cardWidth !== undefined && options.cardWidth !== 262) style.textContent += `.ic-DashboardCard {width: ${options.cardWidth}px!important;}`;
|
if (options.cardWidth !== undefined && options.cardWidth !== 262) style.textContent += `.ic-DashboardCard {width: ${options.cardWidth}px!important;}`;
|
||||||
if (options.cardHeight !== undefined && options.cardHeight !== 250) style.textContent += `.ic-DashboardCard {height: ${options.cardHeight}px!important;}`;
|
// Always emit a fixed card height when custom card styles are on. The old
|
||||||
|
// `!== 250` guard silently dropped the height rule when cardHeight matched
|
||||||
|
// the default, which is exactly what happens after importing a theme that
|
||||||
|
// carries the default cardHeight (250) — leaving cards content-sized.
|
||||||
|
// Content-sized cards plus the dashboard reflow loop trigger Firefox scroll
|
||||||
|
// anchoring to yank the viewport back up while scrolling. A fixed height
|
||||||
|
// (even the default 250px) keeps layout stable.
|
||||||
|
if (options.cardHeight !== undefined && options.cardHeight !== null && options.cardHeight !== "") style.textContent += `.ic-DashboardCard {height: ${options.cardHeight}px!important;}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
style.textContent += ".ic-app-nav-toggle-and-crumbs{display:none!important}";
|
style.textContent += ".ic-app-nav-toggle-and-crumbs{display:none!important}";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user