Add userscript
This commit is contained in:
parent
9ff23ab1fe
commit
4ad20b24c9
112
VUT.user.js
Normal file
112
VUT.user.js
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
// ==UserScript==
|
||||||
|
// @name VU.Tweaker
|
||||||
|
// @description Просмотр тестов на videouroki.net
|
||||||
|
// @author timoxa0
|
||||||
|
// @license GPLv3
|
||||||
|
// @version 1.2
|
||||||
|
// @match https://videouroki.net/et/pupil/*
|
||||||
|
// @match https://videouroki.net/et/pupil
|
||||||
|
// ==/UserScript==
|
||||||
|
(function (window, undefined) {
|
||||||
|
// Normalazing window as w and preverting from running in frame
|
||||||
|
var w;
|
||||||
|
if (typeof unsafeWindow != undefined) {
|
||||||
|
w = unsafeWindow
|
||||||
|
} else {
|
||||||
|
w = window;
|
||||||
|
}
|
||||||
|
if (w.self != w.top) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additioanal url check
|
||||||
|
if (/https:\/\/videouroki.net/.test(w.location.href)) {
|
||||||
|
|
||||||
|
// Find element inside another one
|
||||||
|
function findInside(parentElm, classname) {
|
||||||
|
let tmp = [];
|
||||||
|
let all = document.getElementsByClassName("material_item_column")
|
||||||
|
for (let i = 0; i < all.length; i++) {
|
||||||
|
let parent = all[i] ? all[i].parentNode : {};
|
||||||
|
if (parent === parentElm) { tmp.push(all[i]); }
|
||||||
|
}
|
||||||
|
return tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find element by XPath
|
||||||
|
function getElementByXpath(path) {
|
||||||
|
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRandomInt(max) {
|
||||||
|
return Math.floor(Math.random() * max);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open test page
|
||||||
|
function viewTest(id) {
|
||||||
|
fetch("https://videouroki.net/tests/api/beginTest/" + id, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({
|
||||||
|
"member": {
|
||||||
|
"id": false,
|
||||||
|
"lastname": "Иванов",
|
||||||
|
"firstname": "Иван",
|
||||||
|
"classTxt": (getRandomInt(2) + 9) + "А"
|
||||||
|
},
|
||||||
|
"related": 0
|
||||||
|
}),
|
||||||
|
headers: {
|
||||||
|
"Content-type": "application/json; charset=UTF-8"
|
||||||
|
}
|
||||||
|
}).then((response) => response.json()).then((json) => {
|
||||||
|
window.open("https://videouroki.net/tests/do/" + json.uuid, "_blank");
|
||||||
|
navigator.clipboard.writeText(json.uuid).then(() => {},() => {
|
||||||
|
console.error('Не удалось скопировать UUID');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function copyId (id) {
|
||||||
|
navigator.clipboard.writeText(id).then(() => {
|
||||||
|
alert("ID теста скопирован")
|
||||||
|
},() => {
|
||||||
|
console.error('Не удалось скопировать ID');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const tests = w.backend.pupil.tests;
|
||||||
|
var testDivs = document.getElementsByClassName("test material_item");
|
||||||
|
for (let i = 0; i < testDivs.length; i++) {
|
||||||
|
|
||||||
|
// Setting up environment
|
||||||
|
let testDiv = testDivs[i];
|
||||||
|
let nameDiv = findInside(testDiv, "material_item_column")[0];
|
||||||
|
let btnDiv = findInside(testDiv, "material_item_column")[1];
|
||||||
|
let name = nameDiv.childNodes[nameDiv.childNodes.length-1].textContent.trim(); // Test name filter
|
||||||
|
let test = tests.find(o => o.test.title === name).test;
|
||||||
|
|
||||||
|
// Creting button
|
||||||
|
let viewBtn = document.createElement("a");
|
||||||
|
let copyBtn = document.createElement("a");
|
||||||
|
let span = document.createElement("span");
|
||||||
|
let small = document.createElement("small");
|
||||||
|
span.style = "color: lightgrey;";
|
||||||
|
span.textContent = " | ";
|
||||||
|
viewBtn.href = "#";
|
||||||
|
viewBtn.textContent = "Просмотр";
|
||||||
|
viewBtn.id = "view" + test.fakeId;
|
||||||
|
copyBtn.href = "#";
|
||||||
|
copyBtn.textContent = "ID";
|
||||||
|
copyBtn.id = "copyId" + test.fakeId;
|
||||||
|
small.appendChild(span);
|
||||||
|
small.appendChild(viewBtn);
|
||||||
|
small.appendChild(span.cloneNode(true));
|
||||||
|
small.appendChild(copyBtn);
|
||||||
|
btnDiv.appendChild(small);
|
||||||
|
|
||||||
|
// Adding click acktion
|
||||||
|
document.getElementById("view" + test.fakeId).addEventListener("click", () => {viewTest(test.fakeId)});
|
||||||
|
document.getElementById("copyId" + test.fakeId).addEventListener("click", () => {copyId(test.fakeId)});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(window);
|
Loading…
Reference in a new issue