NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Assignments UC Paste Comments // @namespace https://jorgecardoso.eu // @version 0.2 // @license MIT // @description Allows pasting Comments directly on the Assignments page of the InforDocente system of the University of Coimbra. Just copy (Ctrl-C) a table from a spreadsheet file making sure that there is a column with the student number and a column with the comments (the comments column should be the last column). Then open the assignment page and press Ctrl-V; a button will appear: click on it and wait for all comments to be inserted. // @author jorgecardoso // @copyright 2020, Jorge C. S. Cardoso (https://jorgecardoso.eu) // @match https://infordocente.uc.pt/nonio/ensino/detalhesSubmissaoTrabalhos.do* // @match https://infordocente.uc.pt/nonio/ensino/detalhesSubmissaoAluno.do* // @match https://infordocente.uc.pt/nonio/ensino/adicionarAlterarApreciacao.do* // @grant none // @updateURL https://openuserjs.org/meta/jorgecardoso/Assignments_UC_Paste_Comments.meta.js // ==/UserScript== (function() { 'use strict'; let OPEN_NEW_TAB = false; if ( window.location.href.indexOf("detalhesSubmissaoTrabalhos.do") >= 0) { console.log("Entregas Trabalhos UC"); document.querySelector("body").addEventListener("paste", function(evt){ var data = evt.clipboardData.getData("text/plain"); console.log("Pasted data: "); var newData = ""; var insideQuote = false; for (var i = 0; i < data.length; i++) { if (data[i] === "\"" ) { insideQuote = !insideQuote; console.log("quote"); } if (data[i] === "\n" && insideQuote) { newData += "####"; } else { newData += data[i]; } } //console.log(data); console.log(newData); var rawTable = newData.split("\n"); var dataTable = []; rawTable.forEach(function(row) { var r = row.split("\t").map(function(s) {return s.trim();}); dataTable.push(r); }); console.log(dataTable); localStorage.setItem("dataTable", JSON.stringify(dataTable)); var automateButton = document.createElement('button'); automateButton.innerText = "Go"; automateButton.style.cssText = "position: fixed; right:0; top:50%"; document.body.appendChild(automateButton); console.log("Automating"); var linksToProcess = []; // get all links for student numbers present in our data table var rows = document.querySelectorAll("table td:nth-last-child(6),table td:nth-last-child(7)"); rows.forEach(function(row){ let number = row.innerText.trim(); if (number.length == 10 ) { if (existsInTable(dataTable, row.innerText.trim())) { console.log("Exists"); linksToProcess.push(row.parentElement.querySelector("[href^=\"detalhesSubmissaoAluno.do\"]")); } } }); console.log(linksToProcess); automateButton.addEventListener("click", function() { // var allLinks = document.querySelectorAll("[href^=\"detalhesSubmissaoAluno.do\"]"); var currentLink = 0; window.addEventListener("message", function(event) { if (!event.data.aupc) return; //console.log("received", event); if (event.data.ok) { console.log("Processed student: ", event.data.studentNumber); setTimeout(function() { processNextStudent(); }, 100); } else { console.log("Error processing student: ", event.data.error); } }, false); //console.log(allLinks); let processNextStudent = function() { currentLink++; console.log("Current Link", currentLink); if (currentLink < linksToProcess.length) { if (OPEN_NEW_TAB) { window.open(linksToProcess[currentLink].href+"&automate=true"); console.log("Opened new tab with URL", linksToProcess[currentLink].href+"&automate=true"); } else { win.location= linksToProcess[currentLink].href+"&automate=true"; console.log("Opened URL", linksToProcess[currentLink].href+"&automate=true"); } //setTimeout( returnCloseWindow(window), 5000); } }; var win = window.open(linksToProcess[currentLink].href+"&automate=true"); }); }); } else if ( window.location.href.indexOf("detalhesSubmissaoAluno.do") >= 0 && window.location.href.indexOf("automate=true") >= 0) { console.log("Entregas Trabalhos UC Aluno"); var adicionar = document.querySelector("[href^=\"adicionarAlterarApreciacao.do\"]"); if (adicionar !== null) { window.location = adicionar.href+"&automate=true"; } } else if ( window.location.href.indexOf("adicionarAlterarApreciacao.do") >= 0 && window.location.href.indexOf("automate=true") >= 0 ) { let error = null; window.onload = function() { setTimeout(function() { console.log("Entregas Trabalhos UC Aluno: Apreciacao"); var dataTable = JSON.parse(localStorage.getItem("dataTable")); //console.log(dataTable); if (dataTable) { var editor = document.querySelector("#htmlhelper_ifr"); //console.log(editor); // setTimeout(function() { var autores = document.querySelector("#adicionarAlterarApreciacaoFormBean table tr:nth-child(3) td:nth-child(2)"); var studentNumbers = Array.from(new Set(autores.innerText.match(/\d\d\d\d\d\d\d\d\d\d/gi))); console.log("Processing students", studentNumbers); var first = true; var innerDoc = editor.contentDocument || editor.contentWindow.document; var textField = innerDoc.getElementById("tinymce"); for (var i = 0; i < studentNumbers.length; i++ ) { console.log(studentNumbers[i]); for ( var j = 0; j < dataTable.length; j++) { for ( var k = 0; k < dataTable[j].length; k++) { //console.log(dataTable[j][k]); if (studentNumbers[i] === dataTable[j][k] ) { console.log("Found comments for student ", studentNumbers[i], ": ", dataTable[j][dataTable[j].length-1]); if (first) { textField.innerText = ""; first = false; } console.log(dataTable[j][dataTable[j].length-1]); textField.innerText += dataTable[j][dataTable[j].length-1].replace(/####/g, '\n').replace(/"/g, ''); } } } } if (first) { console.warn("Did not find comments for students"); error = "No data for students " + studentNumbers.join(); } else { let visible = document.querySelector("input[name=\"visivelAlunos\"]"); visible.checked = true; console.log("Setting visible to students"); var gravar = document.querySelector("input[type=\"submit\"][value=\"Gravar\"]"); setTimeout(function(){ gravar.click(); }, 100); console.log("Saving..."); } setTimeout(function() { if (error != null ) { window.opener.postMessage({aupc: true, ok: false, error: error}, "*"); } else { window.opener.postMessage({aupc: true, ok: true, studentNumber: studentNumbers.join()}, "*"); } }, 100); } else { error = "No data table!"; } }, 1000); }; } function existsInTable(dataTable, value) { for ( var j = 0; j < dataTable.length; j++) { for ( var k = 0; k < dataTable[j].length; k++) { //console.log(dataTable[j][k]); if (value === dataTable[j][k] ) { return true; } } } return false; } function indexInTable(dataTable, value) { for ( var j = 0; j < dataTable.length; j++) { for ( var k = 0; k < dataTable[j].length; k++) { //console.log(dataTable[j][k]); if (value === dataTable[j][k] ) { return j; } } } return -1; } })();