Canvas LMS Tweaks Userscript

Various client-side tweaks & bug-fixes to Canvas LMS.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name     	Canvas LMS Tweaks Userscript
// @namespace	https://github.com/Enchoseon/canvas-lms-tweaks-userscript/blob/main/canvas-lms-tweaks.user.js
// @version  	0.1.3
// @description  Various client-side tweaks & bug-fixes to Canvas LMS.
// @author   	Enchoseon
// @include  	*instructure.com*
// @include  	*instructuremedia.com*
// @run-at   	document-start
// @grant    	none
// ==/UserScript==

(function () {
	"use strict";
	// ===
	// CSS
	// ===
	// Main LMS
	if (window.location.href.includes("instructure.com")) {
    	injectCSS(`
        	/* Responsiveness / Visibility */
        	.planner-completed-items { /* UX: Make completed items in the dashboard in list view greyed out unless hovered over */
            	opacity: 0.21 !important;
            	transition: opacity 169ms !important;
        	}
        	.planner-completed-items:hover {
            	opacity: 0.99 !important;
        	}
        	div.NotificationBadge-styles__activityIndicator.NotificationBadge-styles__hasBadge div span { /* UX: Make notification bubbles green & bouncy */
            	zoom: 125% !important;
            	background-color: lightgreen !important;
            	-webkit-animation: pulsate-fwd 690ms ease-in-out infinite both !important;
            	animation: pulsate-fwd 690ms ease-in-out infinite both !important;
        	}
        	body.primary-nav-transitions .menu-item__text { /* UX: Replace 600ms bounce animation with a faster sliding one */
            	transition: transform 69ms cubic-bezier(0.21, 0.420, 0.69, 1.275),opacity 42ms !important;
            	transition-delay: 21ms !important;
        	}
        	/* Debloat */
        	#immersive_reader_mount_point, /* UX: Remove the immersive reader button, which is just another eyesore unless you actually use it */
        	#new_activity_button, /* UX: Remove the new activity button. The new activity button doesn't work because most teachers don't remove/delete old assignments—It's clutter that links to clutter */
        	#footer, /* UX: Remove the footer, which is pointless linkspam for Instructure LTI's social media & legalese that noone reads */
        	#global_nav_history_link, /* UX: Remove the "History" button from the leftmost sidebar. Nobody uses this feature */
        	#global_nav_help_link, /* UX: Remove "Help" button from leftmost sidebar. Using this userscript means you're already proficient at using Canvas. Also, the "Ask Your Instructor a Question" feature is obsoleted by emailing—I also doubt you even knew it existed */
        	#primaryNavToggle, /* UX: Removes expand toggle for leftmost sidebar */
        	#conversation-actions button[disabled], /* UX: Remove buttons that were already disabled by your organization in the inbox—Why those basic features would be disabled is beyond me. */
        	#course_show_secondary a.btn.button-sidebar-wide , /* UX: Remove "View Course Stream", "View Course Calendar", "View Course Notifications" buttons from course view */
        	a.ic-app-header__logomark { /* UX: Remove the clipart-looking icon that is your organization's logo from the leftmost sidebar */
            	display: none !important;
        	}
        	div.Grouping-styles__root.planner-grouping a, div.ic-DashboardCard__header_image { /* UX: Remove class banner images from dashboard in list view & card view (makes them solid colors) */
            	background-image: none !important;
            	height: auto !important;
        	}
        	/* Animations */
        	@-webkit-keyframes pulsate-fwd {
            	0% {
                	-webkit-transform: scale(1);
                	transform: scale(1);
            	}
            	50% {
                	-webkit-transform: scale(1.1);
                	transform: scale(1.1);
            	}
            	100% {
                	-webkit-transform: scale(1);
                	transform: scale(1);
            	}
        	}
        	@keyframes pulsate-fwd {
            	0% {
                	-webkit-transform: scale(1);
                	transform: scale(1);
            	}
            	50% {
                	-webkit-transform: scale(1.1);
                	transform: scale(1.1);
            	}
            	100% {
                	-webkit-transform: scale(1);
                	transform: scale(1);
            	}
        	}
    	`);
	}
	// Video Player
	if (window.location.href.includes("instructuremedia.com")) {
    	injectCSS(`
        	/* Responsiveness / Visibility */
        	.dVRGv_crZr { /* Bug: Video player bar blocks bottom of the video & is not easily dismissed (problematic when pausing to take notes); Fix: The video player bar is now see-through when you're not hovering over it */
            	opacity: 0.25 !important;
            	transition: opacity 250ms !important;
        	}
        	.dVRGv_crZr:hover {
            	opacity: 0.95 !important;
        	}
    	`);
	}
	// ==
	// JS
	// ==
	window.addEventListener("DOMContentLoaded", function () {
    	if (document.getElementById("announcementWrapper") !== null) { // Bug: Scrolling to the top of the announcements causes the entire page to jump downwards (making it hard to close announcements); Fix: All wheel event listeners are now disabled when on the dashboard—May cause problems.
        	window.addEventListener(
            	"wheel",
            	function (event) {
                	event.stopImmediatePropagation();
            	},
            	true
        	);
    	}
    	document.getElementsByTagName("body")[0].classList.remove("primary-nav-expanded"); // UX: Always collapse leftmost sidebar
	});
	window.addEventListener("load", function () {
    	const y = document.getElementById("dashboard_header_container").getBoundingClientRect().top + window.scrollY; // UX: When visiting the dashboard, automatically scroll down to the actual dashboard rather than the announcements
    	window.scroll({
        	top: y,
        	behavior: "smooth",
    	});
	});
	// =========
	// Functions
	// =========
	function injectCSS(css) { // Inject CSS into the header
    	var s = document.createElement("style");
    	s.setAttribute("type", "text/css");
    	s.appendChild(document.createTextNode(css));
    	document.getElementsByTagName("head")[0].appendChild(s);
	}
})();