Userscripts/edupage.user.js
2024-01-28 23:46:01 +01:00

501 lines
18 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==UserScript==
// @name Edupage H4x
// @namespace https://brn.systems
// @version 0.2.33
// @copyright Can be found at https://git.brn.systems/BRNSystems/Userscripts
// @description Gives you a bit more options on EduPage, some are broken
// @author BRNSystems
// @website https://brn.systems
// @downloadURL https://userscripts.brn.systems/edupage.user.js
// @updateURL https://userscripts.brn.systems/edupage.user.js
// @match https://*.edupage.org/*
// @icon64 https://www.google.com/s2/favicons?sz=64&domain=edupage.org
// @icon https://www.google.com/s2/favicons?sz=32&domain=edupage.org
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @require https://openuserjs.org/src/libs/sizzle/GM_config.min.js
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @grant GM_registerMenuCommand
// @grant GM.registerMenuCommand
// ==/UserScript==
( function() {
'use strict';
//from https://addons.mozilla.org/en-US/firefox/addon/edupage-addons/
let darkmodecss = `
:root {
--primary-bg-color: #040404;
--secondary-bg-color: #1d1d1d;
--tertiary-bg-color: #101010;
--text-color: #fff;
--link-hover-color: #5bba6f;
}
.userTopDiv,
.userRozvrh,
.user-novyPrvok,
.userHomeOther,
.hwHeroDiv,
.skgdFixedHeader,
#skin_Div_10,
#skin_Div_11,
.messageViewerHeader,
div.messageViewerReplies.messageViewerReplies1.messageViewerReplyText>form>div>div>textarea,
.ui-dialog-titlebar,
.etest-meditor-test-item.selected {
background-color: var(--primary-bg-color) !important;
box-shadow: none;
}
div.messageViewerReplies.messageViewerReplies1.messageViewerReplyText>form>div>div>textarea {
outline: none;
caret-color: var(--text-color);
color: var(--text-color);
}
body,
html,
.userContentInner,
.bgDiv,
#jw4298a4ab_md,
.edubarSidebar,
.usercalendarTitle>h1,
.zsvFilterElem,
.zsvHeaderTitle,
.zsvHeaderTabs,
.diplomy-st-contet-outer,
.print-nobreak,
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(1)>div>div,
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(1)>div>div>div,
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(1)>div,
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(1),
#fitheight>div:nth-child(1)>span,
#fitheight>div:nth-child(1),
#fitheight,
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(1)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(3)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(5)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(7)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(9)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(11)>div:nth-child(1),
#fitheight>div:nth-child(2)>div>div>div:nth-child(2)>div:nth-child(2)>div>div:nth-child(2)>div:nth-child(13)>div:nth-child(1),
div.mvtMainScroller.replies>div.messageViewerReplies.messageViewerReplies0>ul>li>div.messageReakciaInner,
.edubarHeader,
.edubarProfilebox .display,
.profilemenu {
background-color: var(--secondary-bg-color) !important;
color: var(--text-color) !important;
}
.edubarSmartLink span,
.edubarMenuitem a span,
.ribbon-button span,
.hwWeekItem,
.zsvHeaderTitle>h1,
td>span>span,
td>a,
td>div>a,
.expandMonthBtn,
#home_Heading_2,
.messageViewerConfirmationItem {
color: var(--text-color) !important;
}
.edubarSmartLink:hover,
.edubarMenuitem.active a,
.edubarMenuitem a:hover,
.edubarMenulist a:hover,
.hwmenuElem .selected,
.hwWeekItem,
#fitheight>div:nth-child(2)>div:nth-child(3)>div:nth-child(1),
#fitheight>div:nth-child(2)>div:nth-child(3),
.messageViewerReplyText,
.messageViewerConfirmationsHeader,
.tmv-userCardsList {
background-color: var(--tertiary-bg-color) !important;
}
.hwLoadMoreDiv {
opacity: 1 !important;
}
.userButton,
.edubarMenulist,
.calendar>div,
.hwmenuElem,
.ribbon-section,
.toolbarForm,
.hwDate,
.hwItem,
.hwLoadMoreDiv,
.hwListElem,
.hwsideElem,
.ui-datepicker-header,
.hwMainListMain,
.tmv-userCard,
.sgeRestrictedWidth,
.sgpTargetsPanel,
.etest-meditor-test-list-month,
.etest-meditor-tests-obdobie-combo,
.etest-meditor-test-list-tabs,
.etest-meditor-content,
.etest-meditor-search-results-toolbar {
background-color: #181818 !important;
color: var(--text-color) !important;
}
.messageReplies,
.mvtMainScroller {
background-color: #181818 !important;
}
.hwItem {
margin: 0 !important;
}
.callout {
display: none;
}
.edubarSidebar .edubarMenulist {
background-color: var(--secondary-bg-color) !important;
}
.userButtonLast {
background-color: #1a1a1a !important;
color: var(--text-color);
}
ul.edubarMenulist.level0>li:hover>a,
ul.edubarMenulist.level0>li.v2:hover>a {
background-color: var(--tertiary-bg-color) !important;
}
.messageViewerUser,
.messageViewerText,
.messageViewerClosePart,
.tml-replies-actions,
.messageRepliesTitle,
.ui-dialog-content,
.ui-dialog,
.sgeNavPanel,
.signin-playaction-hero,
.etest-meditor-searchdiv-inner3,
.hwDetails {
background-color: var(--tertiary-bg-color) !important;
color: var(--text-color) !important;
}
th,
.fixedCell,
td {
background-color: var(--tertiary-bg-color) !important;
color: var(--text-color) !important;
border: none !important;
}
.header th,
.sgpQuestionElem {
background-color: #0b0b0b !important;
}
.sgpTargetItem.confirmed {
background-color: var(--link-hover-color) !important;
}
.tt-cell,
.tt-cell+div+div+div span {
filter: brightness(60%);
}
`;
let gmc = new GM_config(
{
id: 'edupage_h4x_cnf',
title: GM_info.script.name + ' Settings',
fields: {
modify_startbutton: {
label: 'Hides the intro button',
type: 'checkbox',
default: true,
title: 'Hides the intro button'
},
modify_adult_student: {
label: 'Fake adult student',
type: 'checkbox',
default: false,
title: 'Fakes you as an adult student(you might be able to sign your own grades)'
},
modify_admin_stuff: {
label: 'Fake admin',
type: 'checkbox',
default: false,
title: 'Fakes isUcitelOrAdmin, isAdmin, getLoggedUserType, hasUserRight, isWebpageAdmin. Some functionality still does not work(Server protection)'
},
modify_restricted: {
label: 'Fake not restricted',
type: 'checkbox',
default: false,
title: 'Fakes EduPage as not restricted(I do not know what this does)'
},
modify_logged_in: {
label: 'Fake logged in',
type: 'checkbox',
default: false,
title: 'Fakes EduPage portal logged in(I do not know what this does)'
},
modify_strings: {
label: 'Patch strings',
type: 'checkbox',
default: true,
title: 'Patch strings to more cool ones'
},
modify_encoding: {
label: 'Disable encoded links',
type: 'checkbox',
default: true,
title: 'Disables ?eqa=gibberish'
},
autologin: {
label: 'Autologin',
type: 'checkbox',
default: false,
title: 'Logs you in automatically'
},
darkmode: {
label: 'Dark mode',
type: 'checkbox',
default: true,
title: 'Makes Edupage dark'
},
},
'events': {
'init': oninit
}
});
function oninit(){
GM_registerMenuCommand('Settings', () => {
gmc.open()
})
let removeintrobtn = gmc.get("modify_startbutton");
let fake_adult_student = gmc.get("modify_adult_student");
let fake_admin = gmc.get("modify_admin_stuff");
let fake_not_restricted = gmc.get("modify_restricted");
let fake_logged_in = gmc.get("modify_logged_in");
let disable_encoding = gmc.get("modify_encoding");
let change_strings = gmc.get("modify_strings");
let darkmode = gmc.get("darkmode");
let autologin = gmc.get("autologin");
let strings = {
3276: "budeme Ťa otravovať za",
3275: "Teraz ťa nebudeme chvíľu otravovať, ale",
3272: "Už kašli na školu, nemá to zmysel a",
3274: "Zabudni na úlohy,",
};
function deleteNotX (jNode) {
jNode.remove ();
}
// Define your modified function
function modifiedGetLoggedUserType() {
// Your custom code here
return 'Admin'; // Override the return value as needed
}
function justtrue(){
return true;
}
function justfalse(){
return false;
}
function modifiedbarEncLink(url) {
return url;
}
if(removeintrobtn){
//removes intro button
waitForKeyElements ("a.learnMoreBtn", deleteNotX);
}
// Find and replace the original function
if (typeof EdubarUtils !== 'undefined') {
if(fake_admin){
if(typeof EdubarUtils.getLoggedUserType === 'function'){
EdubarUtils.getLoggedUserType = modifiedGetLoggedUserType;
console.log('EdubarUtils.getLoggedUserType overridden successfully.');
}
if (typeof EdubarUtils.isWebpageAdmin === 'function') {
EdubarUtils.isWebpageAdmin = justtrue;
console.log('EdubarUtils.isWebpageAdmin overridden successfully.');
} else {
console.error('EdubarUtils.isWebpageAdmin not found or not a function.');
}
if (typeof EdubarUtils.hasUserRight === 'function') {
EdubarUtils.hasUserRight = justtrue;
console.log('EdubarUtils.hasUserRight overridden successfully.');
} else {
console.error('EdubarUtils.hasUserRight not found or not a function.');
}
if (typeof EdubarUtils.isAdmin === 'function') {
EdubarUtils.isAdmin = justtrue;
console.log('EdubarUtils.isAdmin overridden successfully.');
} else {
console.error('EdubarUtils.isAdmin not found or not a function.');
}
if (typeof EdubarUtils.isUcitelOrAdmin === 'function') {
EdubarUtils.isUcitelOrAdmin = justtrue;
console.log('EdubarUtils.isUcitelOrAdmin overridden successfully.');
} else {
console.error('EdubarUtils.isUcitelOrAdmin not found or not a function.');
}
}
if(fake_adult_student){
if (typeof EdubarUtils.isAdultStudent === 'function') {
EdubarUtils.isAdultStudent = justtrue;
console.log('EdubarUtils.isAdultStudent overridden successfully.');
} else {
console.error('EdubarUtils.isAdultStudent not found or not a function.');
}
if (typeof EdubarUtils.isParentOrAdultStudent === 'function') {
EdubarUtils.isParentOrAdultStudent = justtrue;
console.log('EdubarUtils.isParentOrAdultStudent overridden successfully.');
} else {
console.error('EdubarUtils.isParentOrAdultStudent not found or not a function.');
}
}
if(fake_not_restricted){
if (typeof EdubarUtils.isRestrictedEdupage === 'function') {
EdubarUtils.isRestrictedEdupage = justfalse;
console.log('EdubarUtils.isRestrictedEdupage overridden successfully.');
} else {
console.error('EdubarUtils.isRestrictedEdupage not found or not a function.');
}
}
if(fake_logged_in){
if (typeof EdubarUtils.isLoggedToPortal === 'function') {
EdubarUtils.isLoggedToPortal = justtrue;
console.log('EdubarUtils.isLoggedToPortal overridden successfully.');
} else {
console.error('EdubarUtils.isLoggedToPortal not found or not a function.');
}
}
} else {
console.error('EdubarUtils not found or not a function.');
}
if(disable_encoding){
if (typeof unsafeWindow.barEncLink === 'function') {
unsafeWindow.barEncLink = modifiedbarEncLink;
//unsafeWindow.AscMobileAppVersion = "69420";
unsafeWindow.$j.post = function(url, data, success, dataType, eqav) {
if (!eqav) {
eqav = 1;
}
if(data && Object.keys(data).length === 0) {
data = {
eqap: "",
eqacs: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
eqaz: 0,
}
}
url += (url.indexOf('?') >= 0 ? '&' : '?')+'eqav='+eqav+'&maxEqav='+unsafeWindow.maxEqav;
return $j.origPost(url, data, success, dataType);
};
//MobileAppBridge.isActive = function() {
// return false;
//}
console.log("barEncLink overriden successfully.");
}
else {
console.error('barEncLink not found or not a function.');
}
}
if(change_strings){
if (typeof unsafeWindow.Langs === 'object') {
for (var key in strings) {
var value = strings[key];
unsafeWindow.Langs[key] = value;
}
console.log("Strings overriden successfully.");
}
else {
console.error('Langs not found or not a function.');
}
}
// If Dark Mode is enabled, apply the styles
if (darkmode) {
const style = document.createElement('style');
style.textContent = darkmodecss;
document.head.appendChild(style);
}
if (autologin) {
(async function() {
// Function to get value using postMessage
async function getValue(k) {
return new Promise((resolve) => {
window.addEventListener("message", (e) => {
console.log(e);
if (e.data.message === "getValueResponse") {
resolve(e.data.value);
}
});
window.postMessage({ message: "getValue", key: k }, "*");
});
}
// Wait for the DOM to be ready
await new Promise(resolve => {
if (document.readyState === 'complete') {
resolve();
} else {
window.addEventListener('load', resolve);
}
});
// Select elements
const userField = document.querySelector("#home_Login_1e1");
const passField = document.querySelector("#home_Login_1e2");
// Check if userField exists and host matches
if (userField && location.host === (await getValue("autologin_host")) + ".edupage.org") {
// Populate fields with autologin credentials
userField.value = await getValue("autologin_username");
passField.value = await getValue("autologin_password");
// Click the submit button
}
})();
}
}
})();