2024-01-28 23:31:49 +01:00
|
|
|
|
// ==UserScript==
|
|
|
|
|
// @name Edupage H4x
|
|
|
|
|
// @namespace https://brn.systems
|
2024-01-28 23:44:14 +01:00
|
|
|
|
// @version 0.2.32
|
2024-01-28 23:31:49 +01:00
|
|
|
|
// @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/
|
2024-01-28 23:44:14 +01:00
|
|
|
|
let darkmodecss = `
|
|
|
|
|
:root {
|
|
|
|
|
--primary-bg-color: #040404;
|
|
|
|
|
--secondary-bg-color: #1d1d1d;
|
|
|
|
|
--tertiary-bg-color: #101010;
|
|
|
|
|
--text-color: #fff;
|
|
|
|
|
--link-hover-color: #5bba6f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Specific selectors for each section */
|
|
|
|
|
|
|
|
|
|
.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,
|
|
|
|
|
/* ... (other selectors) ... */
|
|
|
|
|
.sgpQuestionElem {
|
|
|
|
|
background-color: var(--tertiary-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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ... (other selectors) ... */
|
|
|
|
|
|
|
|
|
|
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%);
|
|
|
|
|
}
|
|
|
|
|
`;
|
2024-01-28 23:31:49 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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',
|
2024-01-28 23:36:40 +01:00
|
|
|
|
default: true,
|
2024-01-28 23:31:49 +01:00
|
|
|
|
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',
|
2024-01-28 23:36:40 +01:00
|
|
|
|
default: true,
|
2024-01-28 23:31:49 +01:00
|
|
|
|
title: 'Patch strings to more cool ones'
|
|
|
|
|
},
|
|
|
|
|
modify_encoding: {
|
|
|
|
|
label: 'Disable encoded links',
|
|
|
|
|
type: 'checkbox',
|
2024-01-28 23:36:40 +01:00
|
|
|
|
default: true,
|
2024-01-28 23:31:49 +01:00
|
|
|
|
title: 'Disables ?eqa=gibberish'
|
|
|
|
|
},
|
|
|
|
|
autologin: {
|
|
|
|
|
label: 'Autologin',
|
|
|
|
|
type: 'checkbox',
|
|
|
|
|
default: false,
|
|
|
|
|
title: 'Logs you in automatically'
|
|
|
|
|
},
|
|
|
|
|
darkmode: {
|
|
|
|
|
label: 'Dark mode',
|
|
|
|
|
type: 'checkbox',
|
2024-01-28 23:36:40 +01:00
|
|
|
|
default: true,
|
2024-01-28 23:31:49 +01:00
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-24 17:33:09 +02:00
|
|
|
|
})();
|