Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name It's learning test filler
- // @namespace http://tyilo.com/
- // @version 0.1
- // @description enter something useful
- // @include https://aarhustech.itslearning.com/Ntt/TestTool/TakeTest.aspx*
- // @include https://aarhustech.itslearning.com/Ntt/EditTool/ViewTest.aspx*
- // @run-at document-end
- // @copyright 2011+, Asger Drewsen
- // ==/UserScript==
- /* Globals */
- var save, testID, currentQuestionID, loading, NOID = 'noID';
- /* Settings */
- var fast = true;
- /*NodeList.prototype.toArray = function()
- {
- var array = [];
- for(var i = 0; i < this.length; i++)
- {
- array.push(this[i]);
- }
- return array;
- };*/
- function insertAnswers()
- {
- if(!save[testID]['questions'][currentQuestionID])
- {
- return;
- }
- var question = save[testID]['questions'][currentQuestionID];
- var inputs = document.getElementById('qti-choiceinteraction-container').getElementsByTagName('input');
- for(var k = 0; k < inputs.length; k++)
- {
- inputs[k].value = question['answers'][k];
- inputs[k].style.backgroundColor = ((question['correct'] == 2)? 'lime': ((question['correct'] == 1)? 'silver': 'red'));
- }
- }
- function parseResults(evt)
- {
- var resultDOM = evt.target.contentWindow.document;
- var answersContainers = resultDOM.getElementsByClassName('NTT_studentReport_RegularRow');
- for(var i = 0; i < answersContainers.length; i++)
- {
- var spans = resultDOM.getElementById('ctl30_' + (i + 1) + '_ctl01_ctl00_fullTextContent').getElementsByTagName('span');
- var questionID;
- if(spans.length == 2)
- {
- questionID = NOID;
- }
- else
- {
- questionID = spans[0].id;
- }
- if(!save[testID]['questions'][questionID])
- {
- save[testID]['questions'][questionID] = {'correct': 0, 'answers': []};
- }
- var correct = (answersContainers[i].getElementsByClassName('NTT_correctAnswer').length? 2: (answersContainers[i].getElementsByClassName('NTT_partlyCorrectAnswer').length? 1: 0));
- if(save[testID]['questions'][questionID]['correct'] > correct)
- {
- continue;
- }
- save[testID]['questions'][questionID]['correct'] = correct;
- if(save[testID]['questions'][questionID]['answers'].length)
- {
- save[testID]['questions'][questionID]['answers'] = [];
- }
- var answers = answersContainers[i].getElementsByClassName('qti-simple-blank');
- for(var j = 0; j < answers.length; j++)
- {
- save[testID]['questions'][questionID]['answers'].push(answers[j].innerText);
- }
- if(currentQuestionID == questionID)
- {
- insertAnswers();
- }
- }
- GM_setValue('save', save);
- }
- function loadIframes(urls, callback)
- {
- if(typeof urls == 'string')
- {
- urls = [urls];
- }
- if(fast)
- {
- urls = [urls.pop()];
- }
- for(var i = 0; i < urls.length; i++)
- {
- var resultIframe = document.createElement('iframe');
- resultIframe.src = urls[i];
- //resultIframe.style.display = 'none';
- resultIframe.onload = callback;
- document.body.appendChild(resultIframe);
- }
- }
- function parseAttempts(attempts)
- {
- var urls = [];
- for(var i = 0; i < attempts.length; i++)
- {
- var match = /TestResultId=([^&]*)/.exec(attempts[i].onclick);
- if(match)
- {
- var testResultID = match[1];
- urls.push('https://aarhustech.itslearning.com/Ntt/EditTool/ShowResult.aspx?TestResultId=' + testResultID);
- }
- }
- return urls;
- }
- function parseTestOverview(DOM)
- {
- console.log(save);
- save[testID]['lastCheck'] = Date.now();
- var attempts = DOM.getElementsByClassName('answered');
- if(attempts.length == 0)
- {
- save[testID]['attempts'] = undefined;
- save[testID]['lastAttempt'] = undefined;
- save[testID]['lastAttempts'] = undefined;
- save[testID]['updated'] = false;
- }
- else if(save['lastAttempts'] || save['lastAttempts'] < attempts.length)
- {
- save[testID]['attempts'] = parseAttempts(attempts);
- var dateString = attempts[attempts.length - 1].innerText
- var dateTime = dateString.split(' ');
- var date = dateTime[0].split('-');
- var time = dateTime[1].split(':');
- save[testID]['lastAttempt'] = (new Date(date[2], date[1] - 1, date[0], time[0], time[1])).getTime();
- save[testID]['lastAttempts'] = attempts.length;
- save[testID]['updated'] = false;
- }
- else
- {
- save[testID]['updated'] = true;
- }
- GM_setValue('save', save);
- console.log(save);
- return attempts;
- }
- function update()
- {
- loadIframes('https://aarhustech.itslearning.com/Ntt/EditTool/ViewTest.aspx?TestID=' + testID, function(evt)
- {
- var resultsDOM = evt.target.contentWindow.document;
- var attempts = parseTestOverview(resultsDOM);
- loadIframes(parseAttempts(attempts), parseResults);
- });
- }
- var match = /\/([^\/]*)\.aspx\?.*TestID=([^&]*)/.exec(window.location.href);
- if(match)
- {
- save = GM_getValue('save', {});
- /*
- Save format:
- + Object save
- | + Object <testID>
- | | - Number lastCheck
- | | - Number lastAttempt
- | | - Number lastAttempts
- | | - Boolean updated
- | | - Array attempts
- | | + Object questions
- | | | + Object <questionID>
- | | | | - Number correct
- | | | | - Array answers
- | | | |_______________________
- | | |___________________________
- | |_______________________________
- |___________________________________
- */
- testID = match[2];
- if(!save[testID])
- {
- save[testID] = {};
- }
- if(!save[testID]['questions'])
- {
- save[testID]['questions'] = {};
- }
- switch(match[1])
- {
- case 'ViewTest':
- if(window.top.location.href.indexOf('TakeTest.aspx') == -1)
- {
- parseTestOverview(document);
- }
- break;
- case 'TakeTest':
- var spans = document.getElementsByClassName('qti-wrapper')[0].getElementsByTagName('span');
- if(spans.length == 1)
- {
- currentQuestionID = NOID;
- }
- else
- {
- currentQuestionID = spans[1].id;
- }
- if(!(save[testID]['updated'])) // || Date.now() - save[testID]['lastCheck'] > 24 * 60 * 60 * 1000
- {
- loading = document.createElement('div');
- loading = true;
- if(!save[testID]['attempts'])
- {
- update(); // Full update
- }
- else
- {
- loadIframes(save[testID]['attempts'], parseResults); // Cache update
- }
- }
- else
- {
- insertAnswers(); // No update
- }
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement