MORE FEATURES

This commit is contained in:
Guy Sandler 2026-10-25 17:19:38 -07:00
parent 7ff57cd071
commit 9bb1441c83
15 changed files with 123 additions and 2 deletions

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Bessere Seitenleiste"
},
"hide_sidebar": {
"message": "Seitenleiste ausblenden"
},
"sidebar": {
"message": "Seitenleiste"
},
"better_todo": {
"message": "Bessere ToDo-Liste"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Better Sidebar"
},
"hide_sidebar": {
"message": "Hide sidebar"
},
"sidebar": {
"message": "Sidebar"
},
"better_todo": {
"message": "Better todo list"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Barra lateral mejorada"
},
"hide_sidebar": {
"message": "Ocultar barra lateral"
},
"sidebar": {
"message": "Barra lateral"
},
"better_todo": {
"message": "Mejor lista de tareas pendientes"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Barre latérale améliorée"
},
"hide_sidebar": {
"message": "Masquer la barre latérale"
},
"sidebar": {
"message": "Barre latérale"
},
"better_todo": {
"message": "Meilleure liste de choses à faire"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Sidebar Migliorata"
},
"hide_sidebar": {
"message": "Nascondi barra laterale"
},
"sidebar": {
"message": "Barra laterale"
},
"better_todo": {
"message": "Migliore lista delle cose da fare"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "改良サイドバー"
},
"hide_sidebar": {
"message": "サイドバーを非表示"
},
"sidebar": {
"message": "サイドバー"
},
"better_todo": {
"message": "より良いToDoリスト"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Barra lateral melhorada"
},
"hide_sidebar": {
"message": "Ocultar barra lateral"
},
"sidebar": {
"message": "Barra lateral"
},
"better_todo": {
"message": "Melhor lista de tarefas"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Улучшенная боковая панель"
},
"hide_sidebar": {
"message": "Скрыть боковую панель"
},
"sidebar": {
"message": "Боковая панель"
},
"better_todo": {
"message": "Лучший список дел"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "Bättre sidomeny"
},
"hide_sidebar": {
"message": "Dölj sidofält"
},
"sidebar": {
"message": "Sidofält"
},
"better_todo": {
"message": "Bättre att göra-lista"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "更好的侧边栏"
},
"hide_sidebar": {
"message": "隐藏侧边栏"
},
"sidebar": {
"message": "侧边栏"
},
"better_todo": {
"message": "更好的待办事项列表"
},

View File

@ -53,6 +53,12 @@
"better_sidebar": {
"message": "強化側邊欄"
},
"hide_sidebar": {
"message": "隱藏側邊欄"
},
"sidebar": {
"message": "側邊欄"
},
"better_todo": {
"message": "更好的待办事项列表"
},

View File

@ -369,6 +369,7 @@
<button type="button" id="celebration-preview-btn" class="customization-button celebration-sub" style="margin-top:8px;width:100%;" data-i18n="celebration_preview">Preview celebration</button>
</div>
<div class="option-container">
<h3 class="header-small" data-i18n="sidebar">Sidebar</h3>
<div class="option" id="better_sidebar">
<input type="radio" id="off" name="better_sidebar">
<input type="radio" id="on" name="better_sidebar">
@ -378,6 +379,18 @@
</div>
<span class="option-name" data-i18n="better_sidebar">Better Sidebar</span>
</div>
<!-- Only offered with Better Sidebar off: it replaces the rail entirely. -->
<div id="hide_sidebar_row" style="margin-top:10px;display:none;">
<div class="option" id="hide_sidebar">
<input type="radio" id="off" name="hide_sidebar">
<input type="radio" id="on" name="hide_sidebar">
<div class="slider">
<div class="sliderknob"></div>
<div class="sliderbg"></div>
</div>
<span class="option-name" data-i18n="hide_sidebar">Hide sidebar</span>
</div>
</div>
<div class="sub-options">
<div class="option" id="remlogo" style="margin-top:2px">
<input type="radio" id="off" name="remlogo">

View File

@ -110,6 +110,7 @@ chrome.runtime.onInstalled.addListener(function () {
"hide_new_canvas": true,
"hide_sequence_footer": false,
"hide_navbar": false,
"hide_sidebar": false,
"quiz_safe_mode": false,
"dark_mode_fix": [],
"assignment_states": {},

View File

@ -74,6 +74,7 @@ function setupNavigationListener() {
if (next === current_page) return;
current_page = next;
watchSequenceFooter();
applyHideSidebar();
applyHideAssignmentSidebar();
watchSubmissionPageButton();
watchProfileLogoutPageButton();
@ -379,6 +380,34 @@ function watchSequenceFooter() {
applyHideSequenceFooter();
}
// "Hide sidebar" drops Canvas' global nav rail completely and pulls the page back to
// the left edge (the layout keeps that column's width as a margin). CSS-only, so it
// survives re-renders; the replacement rail (Better Sidebar) owns the column when on.
function applyHideSidebar() {
let style = document.getElementById("canvasrefined-hide-sidebar");
const hide = options.hide_sidebar === true && options.better_sidebar !== true && !quizSafeModeActive();
if (!hide) {
if (style) style.remove();
return;
}
if (!style) {
style = document.createElement("style");
style.id = "canvasrefined-hide-sidebar";
style.textContent = `
#header,
.ic-app-header__main-navigation {
display: none !important;
}
#wrapper,
.ic-Layout-wrapper,
#main {
margin-left: 0 !important;
}
`;
(document.head || document.documentElement).appendChild(style);
}
}
// The assignment page's details column repeats what the assignment header already
// shows and takes half the width, so it is dropped there. CSS-only, so it survives
// Canvas re-renders and SPA navigation; removed again on any other page.
@ -1043,6 +1072,7 @@ function startExtension() {
applyCustomBackground();
setupMobileNavStyle();
ensureBetterSidebar();
applyHideSidebar();
watchSequenceFooter();
watchProfileLogoutPageButton();
watchGradeAnalytics();
@ -1329,6 +1359,11 @@ function applyOptionsChanges(changes) {
case "full_width":
case "center_cards":
case "custom_styles":
applyAestheticChanges();
break;
case "hide_sidebar":
applyHideSidebar();
break;
case "hide_navbar":
applyAestheticChanges();
// "Hide Navigation Bar" owns that inline style; setupBetterSidebar only sets it on first mount.

View File

@ -1,4 +1,4 @@
const syncedSwitches = ['remind', 'tab_icons', 'dark_mode', 'remlogo', 'full_width', 'auto_dark', 'assignments_due', 'gpa_calc', 'gradient_cards', 'disable_color_overlay', 'dashboard_grades', 'dashboard_notes', 'focus_timer', 'breathing', 'daily_quotes', 'quick_links', 'heatmap', 'better_todo', 'todo_celebrations_enabled', 'better_sidebar', 'condensed_cards', 'hide_new_canvas', 'hide_sequence_footer', 'center_cards', 'quiz_safe_mode', 'global_search', 'grade_analytics', 'hide_personal_details'];
const syncedSwitches = ['remind', 'tab_icons', 'dark_mode', 'remlogo', 'full_width', 'auto_dark', 'assignments_due', 'gpa_calc', 'gradient_cards', 'disable_color_overlay', 'dashboard_grades', 'dashboard_notes', 'focus_timer', 'breathing', 'daily_quotes', 'quick_links', 'heatmap', 'better_todo', 'todo_celebrations_enabled', 'better_sidebar', 'condensed_cards', 'hide_new_canvas', 'hide_sequence_footer', 'center_cards', 'quiz_safe_mode', 'global_search', 'grade_analytics', 'hide_personal_details', 'hide_sidebar'];
const syncedSubOptions = [
"grade_analytics_zones",
"hide_course_images",
@ -215,7 +215,7 @@ async function initLanguageSelector() {
const exportDarkSchedule = ["auto_dark", "auto_dark_start", "auto_dark_end", "device_dark"];
const exportCardColorToggles = ["gradient_cards", "disable_color_overlay"];
const exportCardStyles = ["customCardStyles", "imageSize", "cardRoundness", "imageRoundness", "cardSpacing", "cardWidth", "cardHeight", "cardPadding", "card_grid", "card_grid_columns", "card_grid_rows", "card_grid_column_gap", "card_grid_row_gap", "card_grid_center_rows", "card_grid_flex"];
const exportLayout = ["full_width", "center_cards", "condensed_cards", "equal_height_cards", "remlogo", "hide_new_canvas", "hide_navbar", "tab_icons"];
const exportLayout = ["full_width", "center_cards", "condensed_cards", "equal_height_cards", "remlogo", "hide_new_canvas", "hide_navbar", "hide_sidebar", "tab_icons"];
const exportSidebar = ["better_sidebar", "sidebar_scale"];
const exportTodo = ["better_todo", "todo_hide_feedback", "todo_hide_read", "todo_full_height", "todo_celebrations_enabled", "todo_celebrations", "todo_celebration_amount", "todo_progress_rings", "todo_timeframe", "todo_timeframe_custom_past", "todo_timeframe_custom_future", "todo_hr24", "todo_separate_scrollbar", "todo_alternate_colors", "todo_ignore_card_colors", "todo_remove_icons", "todo_show_scores", "hover_preview"];
const exportGpa = ["gpa_calc", "gpa_calc_prepend", "gpa_calc_cumulative", "gpa_calc_weighted", "gpa_calc_show_on_hover"];
@ -364,6 +364,7 @@ const defaultOptions = {
"hide_new_canvas": true,
"hide_sequence_footer": false,
"hide_navbar": false,
"hide_sidebar": false,
"grade_analytics_zones": false,
"quiz_safe_mode": false,
"dark_mode_fix": [],
@ -1195,6 +1196,11 @@ function toggleBetterSidebarSubOptions(betterSidebarOn) {
if (remlogoEl) {
remlogoEl.style.display = betterSidebarOn ? "none" : "flex";
}
// "Hide sidebar" only makes sense without the replacement rail.
const hideSidebarRow = document.getElementById("hide_sidebar_row");
if (hideSidebarRow) {
hideSidebarRow.style.display = betterSidebarOn ? "none" : "flex";
}
const sidebarScaleEl = document.getElementById("sidebarScaleSub");
if (sidebarScaleEl) {
sidebarScaleEl.style.display = betterSidebarOn ? "block" : "none";