// ==UserScript==
// @name Diplomaterv portál
// @namespace http://tampermonkey.net/
// @version 0.8
// @description Dipterv portál témalista áttekinthetőségének javítása szokatlan eszközökkel
// @author Kis-Nagy Dániel
// @match https://diplomaterv.vik.bme.hu/hu/Supervisor/Default.aspx
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';
// Decodes the encoded e-mail adress given as parameter, and creates a mailto link from it
function SendEmailBcc(event) {
var body='';
var email = DecodeEmailBcc(event.data.email);
var subject=event.data.subject;
var maxUrlLength = 1970 - subject.length - body.length;
var emails = email.split(';');
var url = 'mailto:?bcc=';
for (var i = 0; i < emails.length; i++) {
if (url.length + email[i].length > maxUrlLength) {
AppendSubjAndBodyAndSendBcc(url, subject, body);
// Start new mailto link.
url = 'mailto:?bcc=';
i--;
}
else {
url += emails[i] + ";";
}
}
// Open a new windows with the last email addresses.
if (url.length > 6) {
AppendSubjAndBodyAndSendBcc(url, subject, body);
}
}
function AppendSubjAndBodyAndSendBcc(url, subject, body) {
// Concatenate the subject and body part to the url.
if (subject.length > 0)
url += '&Subject=' + subject;
if (body.length > 0)
url += '&Body=' + body;
// Open the email client with the email addresses.
location.href = url;
}
// Decodes the encoded e-mail adress given as parameter
function DecodeEmailBcc( encodedEmail )
{
var email = "";
for( var i = 0; i < encodedEmail.length ; )
{
var letter = "";
letter = encodedEmail.charAt( i ) + encodedEmail.charAt( i+1 );
email += String.fromCharCode( parseInt( letter, 16 ) );
i += 2;
}
return email;
}
function comp(a,b) {
var af=a.find('a+br+a').get(0).innerText;
var bf=b.find('a+br+a').get(0).innerText;
return af.localeCompare(bf);
}
// 1. Csoportosítás megteremtése
function createGroupIfNotEmpty(name, id, items) {
if (items.length < 1)
return;
$(".tema-lista").after("
" + name + "
");
$("#" + id).after("");
var ul = $("#" + id + " + ul");
var email='';
items.sort(comp);
for (var item of items) {
item.detach();
ul.append(item);
item.addClass("dolgozat-adatok");
var a_href = item.find('a+br+a').attr('href');
if (a_href) {
var param1=a_href.split("'")[1];
email=email+param1+"3B";
}
}
ul.before("Körlevél küldése");
var link=ul.prev();
link.click({'email':email,'subject':name},SendEmailBcc);
}
$("h2+a+ul").addClass("tema-lista");
var szakdolgozat = [],
dipterv1 = [],
dipterv2 = [],
egyeb = [];
$(".tema-lista > li > span.meta").each(function(idx, tema_meta) {
var item = $(".tema-lista > li:eq(" + idx + ")");
if (tema_meta.innerText.indexOf("Szakdolgozat") != -1) {
szakdolgozat.push(item);
} else if (tema_meta.innerText.indexOf("Diplomatervezés 1") != -1) {
dipterv1.push(item);
} else if (tema_meta.innerText.indexOf("Diplomatervezés 2") != -1) {
dipterv2.push(item);
} else {
egyeb.push(item);
}
});
createGroupIfNotEmpty("Szakdolgozat", "tm-szakdoga", szakdolgozat);
createGroupIfNotEmpty("Diplomatervezés 1", "tm-dipterv1", dipterv1);
createGroupIfNotEmpty("Diplomatervezés 2", "tm-dipterv2", dipterv2);
createGroupIfNotEmpty("Egyéb", "tm-egyeb", egyeb);
// 2. Feladatok besorolásának módosítása
// (Ha tanszékvezetőre vár, az részemről OK)
var unimportantItems = [];
$(".lblStatusWarning").each(function(idx, label) {
if (label.innerText.indexOf("Tanszékvezetőre vár") != -1) {
unimportantItems.push(label);
}
});
for (var item of unimportantItems) {
$(item).removeClass("lblStatusWarning")
.addClass("lblStatusSuccess");
}
// 3. Bírálat elodázása
// (Ha nincs beadott dolgozat, nincs is mit bírálni)
$(".dolgozat-adatok").each(function(idx, item) {
var tasks = $(item).find("div").eq(0).find("span");
var isReviewNeeded = tasks.get(2).innerText.indexOf("Beadva") != -1;
if (!isReviewNeeded) {
var reviewStatusSpan = tasks.get(3);
reviewStatusSpan.innerText = "Még nem aktuális";
$(reviewStatusSpan).removeClass("lblStatusWarning").addClass("lblStatusSuccess");
}
});
// 4. Szűrés
function filter() {
var actives=[]
$("input:checkbox:checked").each(function() {
actives.push($(this).val());
});
$(".dolgozat-adatok").each(function(idx, item) {
var firstTask = $(item).find("div").eq(0).find("span.lblStatusWarning:first");
var firstTaskFound = firstTask && firstTask.length > 0;
if ((firstTaskFound && actives.includes(firstTask.text())) || (!firstTaskFound && actives.includes("Done"))) {
$(item).show();
} else {
$(item).hide();
}
});
}
function updateList() {
var warningStatusList=[];
$(".dolgozat-adatok").each(function(idx, item) {
var firstTask = $(item).find("div").eq(0).find("span.lblStatusWarning:first");
if (firstTask && firstTask.length > 0) {
if (!(warningStatusList.includes(firstTask.text()))) {
warningStatusList.push(firstTask.text());
}
}
});
var html="
Témák szűrése az első várakozó feladat állapota szerint:
";
$("select").after(html);
var current=$("#placeHolder");
for (var status of warningStatusList) {
var ch = document.createElement("input");
ch.setAttribute("type","checkbox");
ch.setAttribute("value",status);
ch.setAttribute("checked",true);
$(ch).change(filter);
current.after(ch);
current=$(ch);
var lb = document.createElement("label");
lb.innerText=status;
current.after(lb);
current=$(lb);
var br=document.createElement("br");
current.after(br);
current=$(br);
}
var ch = document.createElement("input");
ch.setAttribute("type","checkbox");
ch.setAttribute("value","Done");
ch.setAttribute("checked",true);
$(ch).change(filter);
current.after(ch);
current=$(ch);
var lb = document.createElement("label");
lb.innerText="Kész";
current.after(lb);
current=$(lb);
var br=document.createElement("br");
current.after(br);
current=$(br);
}
updateList();