// ==UserScript== // @name Tanszéki portál tananyag letöltő script // @namespace http://tampermonkey.net/ // @version 0.3 // @description Letölti a kiválasztott anyagokat a portálról // @author Czeglédi Viktor // @match https://www.aut.bme.hu/Course/* // @require https://raw.githubusercontent.com/Stuk/jszip/master/dist/jszip.js // @grant none // ==/UserScript== var fileURLs = []; var zip = new JSZip(); var count = 0; (function() { 'use strict'; var downloadBtn = document.createElement("button"); downloadBtn.innerText="Letöltés"; downloadBtn.setAttribute("type","button"); downloadBtn.onclick=downloadAll; $("ul#itemPlaceholderContainer").before(downloadBtn); $('a#hpyCourseFile').each(function(i, e){ var jqel = $(e); var but = document.createElement("input"); but.setAttribute("type","checkbox"); but.setAttribute("value",jqel.attr("href")); jqel.before(but); }); })(); function downloadAll(){ var checkedElements = $('a#hpyCourseFile').siblings("input:checked[type=checkbox]"); if(checkedElements.length === 0) return; fileURLs = []; for(i = 0; i < checkedElements.length; i++){ fileURLs.push($(checkedElements[i]).attr("value")); } count = 0; zip = new JSZip(); downloadFile(fileURLs[0],onDownloadComplete); } function downloadFile(url, onSuccess) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (onSuccess) onSuccess(xhr.response); } } xhr.responseType = "blob"; xhr.open('GET', url, true); xhr.send(); } function onDownloadComplete(blobData){ if (count < fileURLs.length) { blobToBase64(blobData, function(binaryData){ var fileName = fileURLs[count].substring(fileURLs[count].lastIndexOf('/')+1); zip.file(fileName, binaryData, {base64: true}); if (count < fileURLs.length -1){ count++; downloadFile(fileURLs[count], onDownloadComplete); } else { if (zip.generateAsync) { zip.generateAsync({type:"blob"}).then(function(content) { var link=document.createElement('a'); link.download = $("div#body > h1").get(0).innerText+'.zip'; link.href = window.URL.createObjectURL(content); link.click(); }); } else { var blob = zip.generate({type:"blob"}); var link=document.createElement('a'); link.download = $("div#body > h1").get(0).innerText+'.zip'; link.href = window.URL.createObjectURL(blob); link.click(); } } }); } } function blobToBase64(blob, callback) { var reader = new FileReader(); reader.onload = function() { var dataUrl = reader.result; var base64 = dataUrl.split(',')[1]; callback(base64); }; reader.readAsDataURL(blob); }