// ==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("<h3 id='" + id + "'>" + name + "</h3>"); $("#" + id).after("<ul></ul>"); 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("<a href='#' class='hlEmail'>Körlevél küldése</a>"); 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="<br/><br/>Témák szűrése az első várakozó feladat állapota szerint:<br/><div id='placeHolder'/>"; $("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();