您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Данный скрипт позволяет считать средний балл в БРС и также менять баллы чтоб посчитать приблизительно какой может быть ваш средний балл
- // ==UserScript==
- // @name Calculate Average Score
- // @namespace https://gist.github.com/ve3xone/93ee59086618b9e3925bc4376f0feec0
- // @version 2025-01-17-v1.02
- // @description Данный скрипт позволяет считать средний балл в БРС и также менять баллы чтоб посчитать приблизительно какой может быть ваш средний балл
- // @author Vladislav Startsev (aka ve3xone)
- // @match https://istudent.urfu.ru/s/servis-informirovaniya-studenta-o-ballah-brs*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=urfu.ru
- // @grant none
- // @license GNU-GPLV3
- // ==/UserScript==
- (function () {
- 'use strict';
- const originalScores = new Map();
- let includeHidden = false;
- // Make scores editable
- function makeScoresEditable() {
- const disciplineContainer = document.querySelector("#disciplines");
- if (!disciplineContainer) {
- console.log("No disciplines found.");
- return;
- }
- const disciplineElements = disciplineContainer.querySelectorAll(".rating-discipline-outer-container");
- disciplineElements.forEach((element) => {
- const scoreElement = element.querySelector(".td-1");
- const disciplineId = element.querySelector(".rating-discipline")?.getAttribute("data-discipline-id");
- if (scoreElement && disciplineId) {
- const scoreText = scoreElement.textContent.trim();
- // Load saved score if available
- const savedScore = localStorage.getItem(`score_${disciplineId}`);
- if (savedScore) {
- scoreElement.textContent = savedScore;
- scoreElement.style.color = "blue";
- }
- // Save the original score
- if (!originalScores.has(scoreElement)) {
- originalScores.set(scoreElement, scoreText);
- }
- // Make the score editable
- scoreElement.contentEditable = true;
- scoreElement.style.border = "1px dashed #000";
- scoreElement.style.backgroundColor = "#f9f9f9";
- scoreElement.addEventListener("input", () => {
- scoreElement.style.color = "blue"; // Highlight changed scores
- localStorage.setItem(`score_${disciplineId}`, scoreElement.textContent.trim()); // Save score locally with discipline ID
- updateAverageScore(); // Recalculate average on change
- });
- }
- });
- }
- // Calculate the average score
- function calculateAverage() {
- const disciplineContainer = document.querySelector("#disciplines");
- if (!disciplineContainer) {
- console.log("No disciplines found.");
- return 0;
- }
- const disciplineElements = disciplineContainer.querySelectorAll(includeHidden
- ? ".rating-discipline-outer-container"
- : ".rating-discipline-outer-container:not(.hidden)");
- let totalScore = 0;
- let count = 0;
- disciplineElements.forEach((element) => {
- const scoreElement = element.querySelector(".td-1");
- if (scoreElement) {
- const scoreText = scoreElement.textContent.trim();
- const score = parseFloat(scoreText);
- // Include only valid numerical scores
- // && score > 0
- if (!isNaN(score) ) {
- totalScore += score;
- count++;
- }
- }
- });
- return count > 0 ? totalScore / count : 0;
- }
- // Update the average score display
- function updateAverageScore() {
- const averageScore = calculateAverage();
- const professionElement = document.querySelector(".education-service-info");
- if (professionElement) {
- let averageDisplay = professionElement.querySelector(".average-score-display");
- if (!averageDisplay) {
- averageDisplay = document.createElement("span");
- averageDisplay.className = "average-score-display";
- averageDisplay.style.marginLeft = "10px";
- averageDisplay.style.fontWeight = "bold";
- professionElement.appendChild(averageDisplay);
- }
- averageDisplay.textContent = `Средний балл: ${averageScore.toFixed(2)}`;
- }
- }
- // Toggle hidden disciplines
- function toggleHiddenDisciplines() {
- includeHidden = !includeHidden;
- updateAverageScore();
- }
- // Reset scores to their original values
- function resetScores() {
- originalScores.forEach((originalValue, element) => {
- element.textContent = originalValue;
- element.style.color = ""; // Remove highlight
- });
- // Clear local storage
- localStorage.clear();
- updateAverageScore();
- console.log("Сброс выполнен.");
- alert("Все изменения сброшены.");
- }
- // Add controls to the page
- function addControls() {
- const professionElement = document.querySelector(".education-service-info");
- if (professionElement) {
- const toggleCheckbox = document.createElement("input");
- toggleCheckbox.type = "checkbox";
- toggleCheckbox.style.marginLeft = "10px";
- toggleCheckbox.addEventListener("change", toggleHiddenDisciplines);
- const label = document.createElement("label");
- label.textContent = "Включать скрытые дисциплины";
- label.style.marginLeft = "5px";
- label.style.fontSize = "14px";
- label.appendChild(toggleCheckbox);
- professionElement.appendChild(label);
- }
- const resetButton = document.createElement("button");
- resetButton.textContent = "Сбросить изменения";
- resetButton.style = buttonStyle();
- resetButton.style.bottom = "10px";
- resetButton.addEventListener("click", resetScores);
- document.body.appendChild(resetButton);
- }
- // Button style function
- function buttonStyle() {
- return `
- position: fixed;
- right: 10px;
- padding: 10px 20px;
- background-color: #007bff;
- color: #fff;
- border: none;
- border-radius: 5px;
- cursor: pointer;
- z-index: 1000;
- `;
- }
- // Initialize the script
- function init() {
- makeScoresEditable();
- addControls();
- updateAverageScore(); // Update average score on page load
- }
- init();
- })();