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