eCampus - Dark Theme

Applies a dark theme to ecampus.

// ==UserScript==
// @name        eCampus - Dark Theme
// @name:fr     eCampus - Thème Sombre
// @namespace   AntoineProost
// @match       https://ecampus.heh.be/*
// @grant       none
// @version     1.1.2
// @author      Antoine Proost
// @description Applies a dark theme to ecampus.
// @description:fr Applique un thème sombre à ecampus.
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    // Rajoute le tag <link> à la <head> du document.
    function addGoogleFontsLinks() {
        var linkPreconnect1 = document.createElement('link');
        linkPreconnect1.rel = 'preconnect';
        // linkPreconnect1.href = 'https://fonts.bunny.net';
        linkPreconnect1.href = 'https://api.fonts.coollabs.io';
        document.head.appendChild(linkPreconnect1);

        var linkStylesheet = document.createElement('link');
        linkStylesheet.rel = 'stylesheet';
        // linkStylesheet.href = 'https://fonts.bunny.net/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap';
        linkStylesheet.href = 'https://api.fonts.coollabs.io/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap';
        document.head.appendChild(linkStylesheet);
    }

    // Injecte du code CSS Custom sur la page.
    function addCustomFontStyles() {
        var style = document.createElement('style');
        style.textContent = `
            body, .drawercontent {
                color: #FFF;
                background-color: #111;
                font-family: "Lato", sans-serif !important;
            }
            .login-container {
                background-color: rgb(0 0 0 / 0%);
            }
            .img-fluid {
                border-radius: 25px;
                padding: 8px;
            }
            .login-container .login-divider {
                border-top: 0px;
            }
            div#learnrpage, form, .format-tiles .course-content ul.tiles .tile, .drawerheader, .courseindex .courseindex-section, .popover-region-container, .message-app {
                background-color: #222;
            }
            .secondary-navigation .navigation, .card, .moremenu .nav-tabs, .course-content ul.topics li.section, .course-content ul.weeks li.section, .course-content ul.cards li.section, .dropdown-menu, .btn.btn-icon:focus, .format-tiles .course-content ul li.section.main:not(.delegated-section), .page-link, .path-mod .activity-header:not(:empty), .course-section.hidden .section-item, .course-section.orphaned .section-item, .path-grade-report-user .user-report-container, .grade-report-user .user-report-container, .content-item-container.unread, .popover-region-footer-container {
                background-color: #333;
            }
            .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link, .course-section .sectionname>a, .block .block-cards span.categoryname, .table, .btn-outline-secondary, .block .block-cards .progress-text, .dropdown-item, .format-tiles ul.tiles .tile h3, .generaltable, .path-mod-assign td.submissionnotgraded, .format-tiles .sectiontitle h2, .tertiary-navigation .tertiary-navigation-selector .dropdown-toggle, .courseindex .courseindex-item .courseindex-link, .courseindex .courseindex-item .courseindex-chevron, .courseindex .courseindex-item.dimmed .courseindex-link, .courseindex .courseindex-item.dimmed .courseindex-chevron {
                color: #DDD;
            }
            div#learnrpage {
                border: 1px solid #343A40;
            }
            .course-section .section-item, .activity-item:not(.activityinline), .path-grade-report-user .user-grade th.category, .grade-report-user .user-grade th.category, .courseindex .courseindex-section, .courseindex .courseindex-item, .popover-region-container, .content-item-container.unread {
                border: 1px solid #555;
                border-radius: 0rem;
            }
            .activity {
                border-top: 0px;
            }
            .path-grade-report-user .user-grade thead th, .grade-report-user .user-grade thead th, .path-grade-report-user .user-grade th.category, .grade-report-user .user-grade th.category, .path-grade-report-user .user-grade td, .grade-report-user .user-grade td, .path-grade-report-user .user-grade .baggt, .path-grade-report-user .user-grade .baggb, .grade-report-user .user-grade .baggt, .grade-report-user .user-grade .baggb, .message-app, .message-app .list-group, .message-app .list-group .list-group-item.list-group-item-action {
                background-color: #444;
            }
            .generaltable thead .sticky-column, .generaltable tbody tr:nth-of-type(even), .format-tiles .sectionbutton {
                background-color: #555;
            }
            btn-group course-request, .course-section .availabilityinfo {
                color: #000;
            }
            .card-footer {
                padding: 0rem 0.5rem;
            }
            .card-footer:last-child {
                //filter: invert(80%);
            }
            .block .block-cards .icon, .course_category_tree .category.with_children.collapsed>.info>.categoryname, .course_category_tree .category.with_children>.info>.categoryname, .fa-xmark::before, .fa-ellipsis-v::before {
                filter: invert(80%);
            }
            .bg-white {
                background-color: rgba(0, 0, 0, 0) !important;
            }
            .btn.btn-icon:focus {
                //height: 50rem;
            }
            .block .block-cards span.categoryname {
                line-height: 0.9;
            }
            .course_category_tree .category .numberofcourse, .list-group-item-action:hover, .list-group-item-action:focus {
                color: #777;
            }
            .format-tiles .course-content ul.tiles .tile.tilestyle-1 {
                border-top-color: var(--primary);
            }
            .format-tiles .course-content ul.tiles .tile {
                box-shadow: 2px 4px 5px 0 #111;
            }
            #page.drawers {
                scrollbar-color: #6a737b #333;
            }
            .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link, .courseindex .courseindex-item:hover .courseindex-link, .courseindex .courseindex-item:hover .courseindex-chevron, .courseindex .courseindex-item:focus .courseindex-link, .courseindex .courseindex-item:focus .courseindex-chevron, .courseindex .courseindex-item:hover.dimmed .courseindex-link, .courseindex .courseindex-item:hover.dimmed .courseindex-chevron, .courseindex .courseindex-item:focus.dimmed .courseindex-link, .courseindex .courseindex-item:focus.dimmed .courseindex-chevron {
                color: #999;
            }
            .bg-light {
                background-color: #222 !important;
            }
            .bg-light, .page-link {
                border: 1px solid #444 !important;
            }
            .breadcrumb {
                background-color: #779;
            }
            .activity-item .activity-completion button.btn-success, .activity-item .activity-completion a[role="button"].btn-success {
                background-color: #97c496;
            }
        `;
        document.head.appendChild(style);
    }

    // Execute tout ça
    addGoogleFontsLinks();
    addCustomFontStyles();
})();