Дисциплины по семестру СФ УУНиТ

Отображение дисциплин сортированных по семестрам СФ УУНиТ

// ==UserScript==
// @name         Дисциплины по семестру СФ УУНиТ
// @namespace    https://github.com/WolfySoCute
// @version      0.1.1
// @description  Отображение дисциплин сортированных по семестрам СФ УУНиТ
// @author       Wolfy
// @match        *://account.struust.ru/Journals/DisciplinesStudent
// @match        *://account.strbsu.ru/Journals/DisciplinesStudent
// @icon         https://account.struust.ru/favicon.ico
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

const reverseObj = (obj) => {
	const reversedArray = Object.keys(obj)
	  .reverse()
	  .map((key) => ({ key, value: obj[key] }));

	return reversedArray;
};

(function() {
    'use strict';

    const semesters = {};
	let header;

	const tableNode = document.getElementsByClassName("table")[0];

	for (const tr of tableNode.getElementsByTagName('tr')) {
		const text = tr.children[2].textContent;
		if (isNaN(text)) {
			header = tr;
			continue;
		}

		const number = text
		if (!semesters[number]) {
			semesters[number] = [tr]
		} else {
			semesters[number].push(tr);
		}
	}

	const reversedResult = reverseObj(semesters);

	const div = document.createElement('div');
	for (const semester of reversedResult) {
		const tableDiv = document.createElement('div');
		tableDiv.style = 'margin-top: 20px';

		const title = document.createElement('h3');
		title.innerText = `${semester.key} семестр`;

		const thead = document.createElement('thead');
		thead.append(header.cloneNode(true));

		const tbody = document.createElement('tbody');
		tbody.append(...semester.value);

		const table = document.createElement('table');
		table.className = 'table';

		table.append(thead, tbody)
		tableDiv.append(title, table);

		div.append(tableDiv);
	}

	header.remove();
	const hr = document.getElementsByClassName('container')[1].getElementsByTagName('hr')[0];
	hr.before(div);
})();