qadigger/tampermonkey.js

106 lines
3.5 KiB
JavaScript
Executable File

// ==UserScript==
// @name AKparse
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Raidok
// @match http://localhost:8080/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
if (document.querySelectorAll('td.popup-contents')[0].childNodes[0].textContent.indexOf('viga') === -1) {
console.log('script aborted');
return;
}
function getDataUri(url, callback) {
var image = new Image();
image.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size
canvas.getContext('2d').drawImage(this, 0, 0);
console.log('loaded', url);
callback(canvas.toDataURL('image/jpeg'));
};
image.src = url;
console.log('loading', url);
}
function nodeListToArray(list) {
var array= new Array(list.length);
for (var i= 0, n= list.length; i<n; i++)
array[i]= list[i];
return array;
}
function parse() {
return nodeListToArray(document.querySelectorAll('table.box td.box')).map(el => {
var tds = el.querySelectorAll('td');
if (!tds) {
console.log('no tds!');
}
var q = tds[0].innerText;
console.log(q, tds);
var img = tds[1].querySelector('img');
var imgSrc = img ? img.getAttribute('src') : undefined;
var i = imgSrc ? { src: imgSrc } : undefined;
var aHtml = tds[2];
//console.log('vastused:', tds[2].innerHTML);
var id = aHtml.querySelector('input[type=hidden]').getAttribute("value");
var as = nodeListToArray(aHtml.querySelectorAll('input[type=checkbox]')).map(x => {
var checked = !!x.getAttribute('checked');
var green = !!(x.nextElementSibling.getAttribute('style') || '').match(/color:.?green/);
var correct = green ? checked : !checked;
return { checked: checked, green: green, correct: correct, text: x.nextElementSibling.innerText };
});
console.log(q,i,as);
return { id: id, question: q, img: i, answers: as };
});
}
function send(what, data) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/' + what);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
if (xhr.status === 200 || xhr.status === 204) {
console.log('Success! Response:' + xhr.responseText);
} else {
console.log('Request failed. Responded ' + xhr.status + ' with content:' + xhr.responseText);
}
};
xhr.send(JSON.stringify({
version: GM_info.script.version,
href: window.location.href,
userAgent: window.agent,
data: data
}));
}
var data = parse();
send('qa', data);
var itemsProcessed = 0;
data.forEach((item, index, array) => {
if (item.img && item.img.src) {
getDataUri(item.img.src, function(dataUri) {
send('img', { id: item.id, src: item.img.src, dataUri: dataUri });
});
}
});
})();