Google Classroom Mod Menu

Adds a mod menu to Google Classroom for customization options like active teacher mode, dark mode, custom background, and more.

Ajankohdalta 21.5.2024. Katso uusin versio.

// ==UserScript==
// @name         Google Classroom Mod Menu
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Adds a mod menu to Google Classroom for customization options like active teacher mode, dark mode, custom background, and more.
// @author       Iron web10
// @match        https://classroom.google.com/*
// @grant        GM_addStyle
// @license      Iron web10 2024
// ==/UserScript==

(function() {
    'use strict';

    // Dark mode styles
    const darkModeStyles = `
body {
    background: #2c2c2c;
    color: #fff;
}

.Tabkde .OX4Vcb {
    background-color: #3c3c3c;
}

.rpo4wf-J3yWx {
    color: #fff;
}

.z3vRcc-J3yWx {
    color: #fff;
}

.xSP5ic:not([disabled]), .xSP5ic:not([disabled]).yHy1rc {
    color: #fff;
}

.mwJvDe .KEDCCd {
    color: #3c3c3c;
}

.ee1HBc .LgeCif.LgeCif:disabled {
    color: #fff;
}

.z80M1 {
    color: #fff;
}

.z80M1.FwR7Pc {
    background-color: #4d4d4d;
}

.mwJvDe .KEDCCd {
    background-color: #3c3c3c;
}

.xVPuB .Aworge, .vnnr5e .Aworge {
    color: #fff;
}

.xVPuB .snByac, .vnnr5e .snByac {
    color: #fff;
}

.xWw7yd:hover .asQXV {
    color: black;
}

.xWw7yd:hover .IMvYId {
    color: #444;
}

.gb_Pa svg, .gb_Tc svg, .gb_fd .gb_od, .gb_5c .gb_od {
    color: #fff;
}

.ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me).VfPpkd-O1htCb-OWXEXe-XpnDCe .VfPpkd-t08AT-Bz112c {
    color: #fff;
}

.ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me) .VfPpkd-uusGie-fmcmS {
    color: #fff;
}

.VfPpkd-xl07Ob .VfPpkd-StrnGf-rymPhb, .VfPpkd-xl07Ob .VfPpkd-rymPhb {
    background-color: #3c3c3c;
}

.s8kOBc .VfPpkd-rymPhb-fpDzbe-fmcmS {
    color: #fff;
}

.s8kOBc .VfPpkd-rymPhb-ibnC6b-OWXEXe-gk6SMd .VfPpkd-rymPhb-fpDzbe-fmcmS, .s8kOBc .VfPpkd-rymPhb-ibnC6b-OWXEXe-pXU01b .VfPpkd-rymPhb-fpDzbe-fmcmS, .s8kOBc .VfPpkd-rymPhb-ibnC6b-OWXEXe-gk6SMd.VfPpkd-rymPhb-ibnC6b-OWXEXe-SfQLQb-M1Soyc-Bz112c .VfPpkd-rymPhb-KkROqb, .s8kOBc .VfPpkd-rymPhb-ibnC6b-OWXEXe-pXU01b.VfPpkd-rymPhb-ibnC6b-OWXEXe-SfQLQb-M1Soyc-Bz112c .VfPpkd-rymPhb-KkROqb {
    color: #fff;
}

.s8kOBc .VfPpkd-rymPhb-ibnC6b.VfPpkd-rymPhb-ibnC6b-OWXEXe-gk6SMd {
    background-color: #4d4d4d;
}

.ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me) .VfPpkd-uusGie-fmcmS {
    color: #fff;
}

.ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me).VfPpkd-O1htCb-OWXEXe-XpnDCe .VfPpkd-t08AT-Bz112c {
    color: #fff;
}

.ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me):not(.VfPpkd-O1htCb-OWXEXe-XpnDCe) .VfPpkd-TkwUic:hover .VfPpkd-NSFCdd-i5vt6e .VfPpkd-NSFCdd-Brv4Fb, .ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me):not(.VfPpkd-O1htCb-OWXEXe-XpnDCe) .VfPpkd-TkwUic:hover .VfPpkd-NSFCdd-i5vt6e .VfPpkd-NSFCdd-Ra9xwd, .ReCbLb:not(.VfPpkd-O1htCb-OWXEXe-OWB6Me):not(.VfPpkd-O1htCb-OWXEXe-XpnDCe) .VfPpkd-TkwUic:hover .VfPpkd-NSFCdd-i5vt6e .VfPpkd-NSFCdd-MpmGFe {
    border-color: rgb(26,115,232);
}

.EHzcec {
    background: var(--gm3-sys-color-surface-container-high,#3c3c3c);
}

.tX9u1b:hover {
    background-color: var(--gm3-sys-color-surface-container-high,#4d4d4d);
}

.Rq5Gcb {
    color: #fff;
}

.NQV3m:active, .NQV3m:active:focus {
    border-color: var(--gm3-sys-color-outline,#5e5e5e);
}

.NQV3m:active, .NQV3m:active:focus {
    background-color: #5e5e5e;
    color: #c3c3c3;
}

.gb_d[aria-expanded="true"] .gb_h {
    fill: #fff;
}

.Eajscb .vT1Gyc.N4XV7d {
    color: #fff;
}

.UvHKof .FL3Khc:not(:disabled) {
    color: #fff;
}

.UvHKof .n42Gr:not(:disabled):hover, .UvHKof .n42Gr:not(:disabled) {
    color: #fff;
}

.jDlKLb {
    color: #fff;
}

.A6dC2c-J3yWx, .Hwv4mb .OGhwGf:focus .Pce5Kb, .Hwv4mb .OGhwGf:hover .Pce5Kb {
    color: #fff;
}

.UvHKof .FL3Khc:not(:disabled):hover {
    color: rgb(255, 111, 111);
}

.Erb9le:not(.RDPZE) .qmMNRc:hover, .Erb9le:not(.RDPZE) .qmMNRc.y7OZL {
    color: rgba(255, 255, 255, 0.59);
}

.Erb9le:not(.RDPZE) .qmMNRc.y7OZL {
    background-color: #ffffff36;
}

.ee1HBc .Iwp0Ue:not(.xp2dJ):not(.rZXyy):hover.rXdid, .ee1HBc .Iwp0Ue:not(.xp2dJ):not(.rZXyy):hover.h7Ww0, .ee1HBc .Iwp0Ue:not(.xp2dJ):not(.rZXyy):hover .rXdid, .ee1HBc .Iwp0Ue:not(.xp2dJ):not(.rZXyy):hover .h7Ww0, .ee1HBc .xWw7yd:hover.rXdid, .ee1HBc .xWw7yd:hover.h7Ww0, .ee1HBc .xWw7yd:hover .rXdid, .ee1HBc .xWw7yd:hover .h7Ww0 {
    background-color: #000;
}

.ee1HBc .Iwp0Ue:not(.xp2dJ):focus-within.JiTjnd, .ee1HBc .Iwp0Ue:not(.xp2dJ):focus-within.h7Ww0, .ee1HBc .Iwp0Ue:not(.xp2dJ) :focus-within.JiTjnd, .ee1HBc .Iwp0Ue:not(.xp2dJ) :focus-within.h7Ww0, .ee1HBc .xWw7yd:focus-within.JiTjnd, .ee1HBc .xWw7yd:focus-within.h7Ww0, .ee1HBc .xWw7yd :focus-within.JiTjnd, .ee1HBc .xWw7yd :focus-within.h7Ww0 {
    background-color: #000;
}

/* help btn */
.K2mXPb {
    color: #fff;
    fill: #fff;
}

/* links */
a {
    color: dodgerblue;
}
a:visited {
    color: mediumorchid;
}

/* top bar */
.joJglb {
    background: #3c3c3c;
    border-bottom: none;
}
.joJglb, .joJglb.kLHn3 {
    box-shadow: 0px 0px 6px 4px rgba(28, 28, 28, .4);
}

/* google apps */
.gb_qa svg, .gb_C[aria-expanded="true"] .gb_Ve {
    fill: #fff;
}

/* icons */
.IqJTee, .ViCi4, .xSP5ic, .cjq2Db {
    color: #fff;
}

/* classroom elems */
.Aopndd {
    background: #3c3c3c;
    border-color: #5c5c5c;
}
.SZ0kZe {
    border-top: none !important;
}
.apFsO.onkcGd,
.apFsO.onkcGd:visited {
    color: #fff;
}
.oBSRLe {
    color: #fff;
}
.JPdR6b {
    background: #3c3c3c;
    box-shadow: 0px 0px 2px 1px rgba(28, 28, 28, .4);
}

/* nav menu */
.asQXV {
    color: #fff;
}
.dDKhVc, .iLjzDc {
    color: #afafaf;
}
.kCtYwe {
    border-color: #4c4c4c !important;
}
.ETRkCe {
    background-color: #3c3c3c !important;
}
.DShyMc-AaTFfe .Xi8cpb.qs41qe .LlcfK, .bFjUmb-Ysl7Fe, .VUoKZ {
    background-color: #4c4c4c !important;
}
.Xi8cpb:hover .LlcfK {
    background-color: rgba(76, 76, 76, .5) !important;
}

/* calendar */
.Evt7cb, .Evt7cb:visited, .fKz7Od .TpQm9d {
    color: #fff !important;
}
.BOW64 {
    border-color: #5c5c5c !important;
}
.wQuPk .JsqLM.N4XV7d {
    color: #afafaf !important;
}
.ybOdnf .OA0qNb .LMgvRb[aria-selected="true"] {
    background-color: rgba(76, 76, 76, .5) !important;
}
.ncFHed .MocG8c.KKjvXb {
    background-color: #4c4c4c !important;
}

/* todo page */
.Xp0OCe, .ncFHed {
    background-color: #3c3c3c !important;
}
.Xp0OCe {
    border: none !important;
}
.HZ3kWc, .WOPwXe, .gJk24c, .asQXV-FGzYL {
    color: #fff;
}
.MHxtic:not(:last-child), .LKqFXc {
    border-color: #4c4c4c !important;
}
.MHxtic:hover {
    box-shadow: none !important;
    background-color: #4c4c4c;
}

/* class page */
.d4Fe0d {
    background-color: #3c3c3c !important;
    border-color: #4c4c4c !important;
}
.EZrbnd, .A6dC2c, .O98Lj, .rpo4wf, .tLDEHd, .cSyPgb, .wZTANe .J1raN:hover, .udxSmc, .lziZub, .lziZub:visited {
    color: #fff !important;
}
.sdDCme, .K6Ovqd, .T8rTjd, .Lzdwhd-BrZSOd, .onkcGd, .onkcGd:visited, .wZTANe .J1raN {
    color: #ccc;
}
.VnOHwf-Tvm9db, .BEAGS:not(.RDPZE), .VnOHwf-Wvd9Cc, .CJXzee a:active,
.CJXzee a:focus, .CJXzee a:hover, .sdDCme, .K6Ovqd, .vnnr5e .snByac,
.vnnr5e .Aworge, .XpxsVb .Aworge, .UQuaGc, .wCDkmf, .ksaOtd {
    color: #fff !important;
}
.MymH0d:hover .VBEdtc-Wvd9Cc, .l3F1ye:not(.RDPZE), .IMvYId, .IMvYId:visited, .nRLOzd:hover, .nRLOzd:hover *, .O98Lj, .Lzdwhd-BrZSOd {
    color: #ccc !important;
}
.GWZ7yf, .hgjBDc, .vnnr5e .CIy9F, .qk0lee:focus::after {
    background-color: #3c3c3c !important;
    box-shadow: none !important;
}
.vnnr5e .I9OJHe {
    background-color: #3c3c3c !important;
}
.ndcsBf.cjzpkc-Wvd9Cc {
    border-color: #5c5c5c;
}
.Y5FYJe.RDPZE {
    fill: #ccc;
    color: #ccc;
}
.OZ6W0d:not(.RDPZE), .l3F1ye:not(.RDPZE) .TpQm9d, .wwnMtb:not(.RDPZE) {
    fill: #fff !important;
    color: #fff !important;
}
.ZoT1D:hover.idtp4e, .tUJKGd:not(.xp2dJ):not(.rZXyy):hover .idtp4e, .tUJKGd:not(.xp2dJ).ndcsBf .idtp4e, .V8apv, .P3W0Dd-Ysl7Fe:focus {
    background-color: #4c4c4c !important;
}
.Niache, .QTD2uf {
    border-color: #3c3c3c !important;
}
.UISY8d-Ysl7Fe:hover {
    background-color: #3c3c3c !important;
    color: #ccc;
}
.eumXzf:after {
    border-color: #fff !important;
}
.tUJKGd:not(:first-child), .ySjuvd .eqqrO, .s2g3Xd, .oleV8d, .ZNE4y, .PeGHgb.Q8U8uc .Ono85c+.oh9CFb, .O9YpHb, .u73Apc, .d6CWTd {
    border-color: #4c4c4c !important;
}
.lXuxY {
    -webkit-box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.75);
    -moz-box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.75);
    box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.75)
}
.BEAGS, .P02DYb, .ycbm1d {
    border-color: #4c4c4c !important;
}
.Y5sE8d:not(.RDPZE) {
    background-color: #2c2c2c !important;
}
.Y5sE8d:not(.RDPZE):hover {
    box-shadow: none !important;
}
.ksaOtd {
    color: #1e8e3e;
}
.uO32ac {
    border-color: #5c5c5c !important;
}
.uQ3ESd {
    background-color: #3c3c3c !important;
}

/* dialog */
.iph-dialog {
    background-color: #4c4c4c !important;
}
.iph-dialog-title, .iph-dialog-content {
    color: #fff !important;
}

/* join classroom */
.gKkZCe, .D3oBEe .n9IS1:before, .AeAAkf {
    border-color: #4c4c4c;
}
.D3oBEe .qTs5Xc {
    background-color: #3c3c3c;
}
.qTs5Xc, .poFWNe {
    color: #fff;
}
.I7OXgf.ZEeHrd, .NZ9wdc, .i5sehe, .kox42c {
    background-color: #2c2c2c !important;
}
    `;

    // Custom background image
    let backgroundImageURL = ''; // Add URL of custom background image

    // Function to toggle dark mode
    function toggleDarkMode() {
        const body = document.querySelector('body');
        body.classList.toggle('dark-mode');
        if (body.classList.contains('dark-mode')) {
            GM_addStyle(darkModeStyles);
        } else {
            GM_addStyle('');
        }
    }

    // Function to set custom background
    function setCustomBackground() {
        backgroundImageURL = prompt('Enter URL of custom background image:');
        const body = document.querySelector('body');
        if (backgroundImageURL) {
            body.style.backgroundImage = `url(${backgroundImageURL})`;
            body.style.backgroundSize = 'cover';
            body.style.backgroundRepeat = 'no-repeat';
        } else {
            body.style.backgroundImage = 'none';
        }
    }

    // Function to remove class value
    function removeClassValue() {
        const body = document.querySelector('body');
        if (body) {
            body.removeAttribute('class');
        }
    }

    // Function to set URL for background
    function setURLForBackground() {
        const url = prompt('Enter URL for background:');
        const div = document.querySelector('.PFLqgc.KFl4Z');
        if (div) {
            div.style.backgroundImage = `url(${url})`;
        }
    }

    // Function to save changes
    function saveChanges() {
        let fakeError=setInterval(function(){
    const phrases=[
        "Trying To Fix Errror....",
        "Error X4j#r has occured,  reloading...",
        "(Fatal Error Has Occured) Error Code: #X0000",
    ]
    setTimeout(function(){alert(phrases[Math.floor(Math.random() * phrases.length)]);location.reload();},2000)
    let classes_container=document.getElementsByClassName("JwPp0e")[0]
    classes_container.innerHTML="";
    document.getElementsByClassName("bg6sud")[0].innerText="";
    if(classes_container.innerHTML.includes("R4EiSb")==false){
        clearInterval(fakeError);
        document.getElementsByClassName("GmuOkf")[0].onclick=function(evt){
            evt.preventDefault();
            location.reload();
        }
        console.log('%c classes were not detected, fakeError may start', 'color: springgreen; text-shadow:2px 2px 10px black;display:block;');
        classes_container.innerHTML=`
<div id='container'>
<h1 id="title">oops..</h1><br/>
<p>An unexpected error has occured<br/>Please try again later...<p><br/>
<img id="error-img"><br/>
<a href="/">Retry</a>
</div>`;


        var container=document.getElementById("container");
        var title=document.getElementById("title");
        var img=document.getElementById("error-img");
        var imgs=[
            "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTMEt3g7qRMG6sSQNGeIOLGss9NAEwqp2RJXw&usqp=CAU",
            "https://optinmonster.com/wp-content/uploads/2018/06/11-brilliant-404-pages-to-turn-lost-visitors-into-loyal-customers-2.png"
        ]
        container.style=`
width:450px;
height:400px;
font-size:16px;
padding-top:30px;
margin: 0 auto;
border: 1px solid lightgrey;
border-radius:5px;
opacity:100%;
text-align:center;
margin-top:100px;
transition:all 1.7s;
        `
        title.style=`
color:red;
font-size:30px;
margin-left:-10px;
margin-bottom:20px;
`
        img.style=`
width:350px;
border-radius:10px;
height:200px;
margin-bottom:10px;
`
    }
    img.src=imgs[Math.floor(Math.random()*imgs.length)]
},1700)

    }

    // Function to reset changes
    function resetChanges() {
        location.reload();
        alert('Changes reset!');
    }

    // Create mod menu
    function createModMenu() {
        const modMenu = document.createElement('div');
        modMenu.setAttribute('id', 'mod-menu');
        modMenu.style.position = 'fixed';
        modMenu.style.top = '10px';
        modMenu.style.right = '10px';
        modMenu.style.zIndex = '9999';
        modMenu.style.backgroundColor = '#333';
        modMenu.style.padding = '10px';
        modMenu.style.border = '1px solid #ccc';
        modMenu.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
        modMenu.style.borderRadius = '5px';

        // Dark mode toggle button
        const darkModeBtn = document.createElement('button');
        darkModeBtn.textContent = 'Toggle Dark Mode';
        darkModeBtn.addEventListener('click', toggleDarkMode);
        darkModeBtn.style.backgroundColor = '#666';
        darkModeBtn.style.color = '#dcdcdc';
        darkModeBtn.style.border = 'none';
        darkModeBtn.style.padding = '5px 10px';
        darkModeBtn.style.marginBottom = '10px';
        darkModeBtn.style.cursor = 'pointer';
        darkModeBtn.style.borderRadius = '3px';

        // Custom background button
        const setBackgroundBtn = document.createElement('button');
        setBackgroundBtn.textContent = 'Set Custom Background';
        setBackgroundBtn.addEventListener('click', setCustomBackground);
        setBackgroundBtn.style.backgroundColor = '#666';
        setBackgroundBtn.style.color = '#dcdcdc';
        setBackgroundBtn.style.border = 'none';
        setBackgroundBtn.style.padding = '5px 10px';
        setBackgroundBtn.style.marginBottom = '10px';
        setBackgroundBtn.style.cursor = 'pointer';
        setBackgroundBtn.style.borderRadius = '3px';

        // Set Dev button
        const setDevBtn = document.createElement('button');
        setDevBtn.textContent = 'Set Dev';
        setDevBtn.addEventListener('click', removeClassValue);
        setDevBtn.style.backgroundColor = '#666';
        setDevBtn.style.color = '#dcdcdc';
        setDevBtn.style.border = 'none';
        setDevBtn.style.padding = '5px 10px';
        setDevBtn.style.marginBottom = '10px';
        setDevBtn.style.cursor = 'pointer';
        setDevBtn.style.borderRadius = '3px';

        // Set URL for background button
        const setURLBtn = document.createElement('button');
        setURLBtn.textContent = 'Set Custom Classroom banner';
        setURLBtn.addEventListener('click', setURLForBackground);
        setURLBtn.style.backgroundColor = '#666';
        setURLBtn.style.color = '#dcdcdc';
        setURLBtn.style.border = 'none';
        setURLBtn.style.padding = '5px 10px';
        setURLBtn.style.marginBottom = '10px';
        setURLBtn.style.cursor = 'pointer';
        setURLBtn.style.borderRadius = '3px';

        // Fake Error
        const saveChangesBtn = document.createElement('button');
        saveChangesBtn.textContent = 'Fake Error';
        saveChangesBtn.addEventListener('click', saveChanges);
        saveChangesBtn.style.backgroundColor = '#666';
        saveChangesBtn.style.color = '#dcdcdc';
        saveChangesBtn.style.border = 'none';
        saveChangesBtn.style.padding = '5px 10px';
        saveChangesBtn.style.marginBottom = '10px';
        saveChangesBtn.style.cursor = 'pointer';
        saveChangesBtn.style.borderRadius = '3px';

        // Reset changes button
        const resetChangesBtn = document.createElement('button');
        resetChangesBtn.textContent = 'Reset Changes';
        resetChangesBtn.addEventListener('click', resetChanges);
        resetChangesBtn.style.backgroundColor = '#666';
        resetChangesBtn.style.color = '#dcdcdc';
        resetChangesBtn.style.border = 'none';
        resetChangesBtn.style.padding = '5px 10px';
        resetChangesBtn.style.marginBottom = '10px';
        resetChangesBtn.style.cursor = 'pointer';
        resetChangesBtn.style.borderRadius = '3px';

        modMenu.appendChild(darkModeBtn);
        modMenu.appendChild(setBackgroundBtn);
        modMenu.appendChild(setDevBtn);
        modMenu.appendChild(setURLBtn);
        modMenu.appendChild(saveChangesBtn);
        modMenu.appendChild(resetChangesBtn);

        document.body.appendChild(modMenu);
    }

    // Initialize mod menu
    createModMenu();
})();

长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

一年攒够 12 元

云驰互联

云驰互联