From 2a612c1bd5f573119035c64a8cb650b178f038f8 Mon Sep 17 00:00:00 2001 From: mrfry Date: Sat, 14 Nov 2020 12:14:30 +0100 Subject: [PATCH] Removed lotsa stuff --- stable.user.js | 456 ++++++++++--------------------------------------- 1 file changed, 91 insertions(+), 365 deletions(-) diff --git a/stable.user.js b/stable.user.js index 0740376..3df132d 100755 --- a/stable.user.js +++ b/stable.user.js @@ -247,7 +247,7 @@ console.warn('NO QUESTION FOR QTEXT') } question = question[0].innerText - return SUtils.RemoveUnnecesarySpaces(question) + return removeUnnecesarySpaces(question) } function getBase64Image(img) { @@ -298,102 +298,21 @@ return input.replace(/\s/g, ' ') } - // ---------------------------------------------------------------------------------------------- - - class StringUtils { - removeMultipleEnters(text) { - let res = text.replace(/\t/g, '') - - while (res.includes('\n\n')) { - res = res.replace('\n\n', '\n') - } - - return res + function emptyOrWhiteSpace(value) { + if (value === undefined) { + return true } - RemoveStuff(value, removableStrings, toReplace) { - removableStrings.forEach(x => { - var regex = new RegExp(x, 'g') - value = value.replace(regex, toReplace || '') - }) - return value - } - - SimplifyQuery(q) { - assert(q) - - var result = q.replace(/\n/g, ' ').replace(/\s/g, ' ') - return this.RemoveUnnecesarySpaces(result) - } - - ShortenString(toShorten, ammount) { - assert(toShorten) - - var result = '' - var i = 0 - while (i < toShorten.length && i < ammount) { - result += toShorten[i] - i++ - } - return result - } - - ReplaceCharsWithSpace(val, char) { - assert(val) - assert(char) - - var toremove = this.NormalizeSpaces(val) - - var regex = new RegExp(char, 'g') - toremove = toremove.replace(regex, ' ') - - return this.RemoveUnnecesarySpaces(toremove) - } - - // removes whitespace from begining and and, and replaces multiple spaces with one space - RemoveUnnecesarySpaces(toremove) { - assert(toremove) - - toremove = this.NormalizeSpaces(toremove) - while (toremove.includes(' ')) { - toremove = toremove.replace(/ {2}/g, ' ') - } - return toremove.trim() - } - - RemoveSpecialChars(value) { - assert(value) - - return this.RemoveStuff(value, specialChars, ' ') - } - - // if the value is empty, or whitespace - EmptyOrWhiteSpace(value) { - // replaces /n-s with "". then replaces spaces with "". if it equals "", then its empty, or only consists of white space - if (value === undefined) { - return true - } - return ( - value - .replace(/\n/g, '') - .replace(/ /g, '') - .replace(/\s/g, ' ') === '' - ) - } - - // damn nonbreaking space - NormalizeSpaces(input) { - assert(input) - - return input.replace(/\s/g, ' ') - } - - SimplifyStack(stack) { - return this.SimplifyQuery(stack) - } + return ( + value + .replace(/\n/g, '') + .replace(/\t/g, '') + .replace(/ /g, '') + .replace(/\s/g, ' ') === '' + ) } - const SUtils = new StringUtils() + // ---------------------------------------------------------------------------------------------- // : }}} @@ -530,151 +449,39 @@ return overlayElement } - class QuestionsPageModell { - GetAllQuestionsDropdown() { - if (logElementGetting) { - Log('getting dropdown question') - } - let items = document - .getElementById('responseform') - .getElementsByTagName('p')[0].childNodes - let r = '' - items.forEach(item => { - if (item.tagName === undefined) { - r += item.nodeValue - } - }) - return r - } - - GetAllQuestionsQtext() { - if (logElementGetting) { - Log('getting all questions qtext') - } - return document - .getElementById('responseform') - .getElementsByClassName('qtext') // getting questions - } - - GetAllQuestionsP() { - if (logElementGetting) { - Log('getting all questions by tag p') - } - return document.getElementById('responseform').getElementsByTagName('p') - } - - GetFormulationClearfix() { - if (logElementGetting) { - Log('getting formulation clearfix lol') - } - return document.getElementsByClassName('formulation clearfix') - } - - GetAnswerOptions() { - if (logElementGetting) { - Log('getting all answer options') - } - return this.GetFormulationClearfix()[0].childNodes[3].innerText - } - - GetQuestionImages() { - if (logElementGetting) { - Log('getting question images') - } - return this.GetFormulationClearfix()[0].getElementsByTagName('img') - } - - // this function should return the question, posible answers, and image names - GetQuestionFromTest() { - var questions // the important questions - var allQuestions // all questions - try { - allQuestions = this.GetAllQuestionsQtext() // getting questions - if (allQuestions.length === 0) { - var ddq = this.GetAllQuestionsDropdown() - if (SUtils.EmptyOrWhiteSpace(ddq)) { - var questionData = '' - for (var j = 0; j < allQuestions.length; j++) { - let subAllQuestions = allQuestions[j].childNodes - for (let i = 0; i < subAllQuestions.length; i++) { - if ( - subAllQuestions[i].data !== undefined && - !SUtils.EmptyOrWhiteSpace(subAllQuestions[i].data) - ) { - questionData += subAllQuestions[i].data + ' ' // adding text to question data - } - } - } - questions = [questionData] - } else { - questions = [ddq] - } - } else { - questions = [] - for (let i = 0; i < allQuestions.length; i++) { - questions.push(allQuestions[i].innerText) - } - } - } catch (e) { - Exception(e, 'script error at getting question:') - } - var imgNodes = '' // the image nodes for questions - try { - imgNodes = this.GetQuestionImages() // getting question images, if there is any - AddImageNamesToImages(imgNodes) // adding image names to images, so its easier to search for, or even guessing - } catch (e) { - Log(e) - Log('Some error with images') - } - - questions = questions.map(item => { - if (item) { - return SUtils.ReplaceCharsWithSpace(item, '\n') - } - }) - - return { - imgnodes: imgNodes, - allQ: allQuestions, - q: questions, - } + // ---------------------------------------------------------------------------------------------- + // Misc + // ---------------------------------------------------------------------------------------------- + + function getCurrentSubjectName() { + if (logElementGetting) { + Log('getting current subjects name') } + return document.getElementById('page-header').innerText.split('\n')[0] || '' } - class MiscPageModell { - GetCurrentSubjectName() { - if (logElementGetting) { - Log('getting current subjects name') - } - return ( - document.getElementById('page-header').innerText.split('\n')[0] || '' - ) - } - - GetVideo() { - if (logElementGetting) { - Log('getting video stuff') - } - return document.getElementsByTagName('video')[0] - } - - GetVideoElement() { - if (logElementGetting) { - Log('getting video element') - } - return document.getElementById('videoElement').parentNode - } - - GetInputType(answers, i) { - if (logElementGetting) { - Log('getting input type') - } - return answers[i].getElementsByTagName('input')[0].type + function getVideo() { + if (logElementGetting) { + Log('getting video stuff') } + return document.getElementsByTagName('video')[0] } - var QPM = new QuestionsPageModell() - var MPM = new MiscPageModell() + function getVideoElement() { + if (logElementGetting) { + Log('getting video element') + } + return document.getElementById('videoElement').parentNode + } + + function getInputType(answers, i) { + if (logElementGetting) { + Log('getting input type') + } + return answers[i].getElementsByTagName('input')[0].type + } + + // ---------------------------------------------------------------------------------------------- // : }}} @@ -973,7 +780,7 @@ } let showMOTD = false - if (!SUtils.EmptyOrWhiteSpace(motd)) { + if (!emptyOrWhiteSpace(motd)) { var prevmotd = getVal('motd') if (prevmotd !== motd) { showMOTD = true @@ -1041,37 +848,35 @@ // : Answering stuffs {{{ function HandleQuiz() { - var q = QPM.GetQuestionFromTest() - var questions = q.q - var imgNodes = q.imgnodes - // ------------------------------------------------------------------------------------------------------ - let promises = [] - questions.forEach(x => { - let question = SUtils.EmptyOrWhiteSpace(x) - ? '' - : SUtils.RemoveUnnecesarySpaces(x) // simplifying question - promises.push( - GetXHRQuestionAnswer({ - q: question, - data: GetImageDataFromImgNodes(imgNodes), - subj: MPM.GetCurrentSubjectName(), - }) - ) - }) - - Promise.all(promises).then(res => { - let answers = [] - - res.forEach((result, j) => { - var r = PrepareAnswers(result, j) - if (r !== undefined) { - answers.push(r) - } - HighLightAnswer(result, j) // highlights the answer for the current result - }) - - ShowAnswers(answers, q.q) - }) + // TODO + // var q = QPM.GetQuestionFromTest() + // var questions = q.q + // var imgNodes = q.imgnodes + // // ------------------------------------------------------------------------------------------------------ + // let promises = [] + // questions.forEach(x => { + // let question = SUtils.EmptyOrWhiteSpace(x) + // ? '' + // : SUtils.RemoveUnnecesarySpaces(x) // simplifying question + // promises.push( + // GetXHRQuestionAnswer({ + // q: question, + // data: GetImageDataFromImgNodes(imgNodes), + // subj: MPM.GetCurrentSubjectName(), + // }) + // ) + // }) + // Promise.all(promises).then(res => { + // let answers = [] + // res.forEach((result, j) => { + // var r = PrepareAnswers(result, j) + // if (r !== undefined) { + // answers.push(r) + // } + // HighLightAnswer(result, j) // highlights the answer for the current result + // }) + // ShowAnswers(answers, q.q) + // }) } function PrepareAnswers(result, j) { @@ -1183,7 +988,7 @@ } try { try { - sentData.subj = MPM.GetCurrentSubjectName() + sentData.subj = getCurrentSubjectName() } catch (e) { sentData.subj = 'NOSUBJ' Log('unable to get subject name :c') @@ -1207,48 +1012,24 @@ // : Helpers {{{ - function GetImageDataFromImgNodes(imgs) { - var questionImages = [] // the array for the image names in question - for (var i = 0; i < imgs.length; i++) { - if (!imgs[i].src.includes('brokenfile')) { - var filePart = imgs[i].src.split('/') // splits the link by "/" - filePart = filePart[filePart.length - 1] // the last one is the image name - questionImages.push( - decodeURI( - SUtils.RemoveUnnecesarySpaces(SUtils.ShortenString(filePart, 30)) - ) - ) // decodes uri codes, and removes exess spaces, and shortening it - } - } - if (questionImages.length > 0) { - return { - type: 'image', - images: questionImages, - } - } else { - return { - type: 'simple', - } - } - } - // adds image names to image nodes function AddImageNamesToImages(imgs) { - for (var i = 0; i < imgs.length; i++) { - if (!imgs[i].src.includes('brokenfile')) { - // TODO: add this to shadowroot - var filePart = imgs[i].src.split('/') // splits the link by "/" - // console.log(imgs[i].src.split("base64,")[1]) - // TODO: base64 - filePart = filePart[filePart.length - 1] // the last one is the image name - var appendTo = imgs[i].parentNode // it will be appended here - var mainDiv = document.createElement('div') - var fileName = SUtils.ShortenString(decodeURI(filePart), 15) // shortening name, couse it can be long as fuck - var textNode = document.createTextNode('(' + fileName + ')') - mainDiv.appendChild(textNode) - appendBelowElement(appendTo, mainDiv) - } - } + // TODO + // for (var i = 0; i < imgs.length; i++) { + // if (!imgs[i].src.includes('brokenfile')) { + // // TODO: add this to shadowroot + // var filePart = imgs[i].src.split('/') // splits the link by "/" + // // console.log(imgs[i].src.split("base64,")[1]) + // // TODO: base64 + // filePart = filePart[filePart.length - 1] // the last one is the image name + // var appendTo = imgs[i].parentNode // it will be appended here + // var mainDiv = document.createElement('div') + // var fileName = SUtils.ShortenString(decodeURI(filePart), 15) // shortening name, couse it can be long as fuck + // var textNode = document.createTextNode('(' + fileName + ')') + // mainDiv.appendChild(textNode) + // appendBelowElement(appendTo, mainDiv) + // } + // } } // this function adds basic hotkeys for video controll. @@ -1256,7 +1037,7 @@ var seekTime = 20 document.addEventListener('keydown', function(e) { try { - var video = MPM.GetVideo() + var video = getVideo() var keyCode = e.keyCode // getting keycode if (keyCode === 32) { // if the keycode is 32 (space) @@ -1280,7 +1061,7 @@ Log(err.message) } }) - var toadd = MPM.GetVideoElement() + var toadd = getVideoElement() var node = CreateNodeWithText(toadd, texts.videoHelp) node.style.margin = '5px 5px 5px 5px' // fancy margin } @@ -1292,11 +1073,11 @@ let maxInd = 4 // inp.length * 0.2; if (dotIndex < maxInd) { - return SUtils.RemoveUnnecesarySpaces( + return removeUnnecesarySpaces( inp.substr(inp.indexOf('.') + 1, inp.length) ) } else if (doubledotIndex < maxInd) { - return SUtils.RemoveUnnecesarySpaces( + return removeUnnecesarySpaces( inp.substr(inp.indexOf(':') + 1, inp.length) ) } else { @@ -1307,61 +1088,6 @@ // highlights the possible solutions to the current question function HighLightAnswer(results, currQuestionNumber) { // TODO: fix this - try { - if (results.length > 0) { - var answers = QPM.GetAllAnswer(currQuestionNumber) // getting all answers - var toColor = [] // the numberth in the array will be colored, and .length items will be colored - var type = '' // type of the question. radio or ticbox or whatitscalled - for (let i = 0; i < answers.length; i++) { - // going thtough answers - if ( - answers[i].tagName && - answers[i].tagName.toLowerCase() === 'div' - ) { - // if its not null and is "div" - var correct = results[0].q.A.toLowerCase() // getting current correct answer from data - var answer = answers[i].innerText.replace(/\n/g, '').toLowerCase() // getting current answer - - // removing stuff like "a." - answer = RemoveLetterMarking(answer) - - if ( - SUtils.EmptyOrWhiteSpace(correct) || - SUtils.EmptyOrWhiteSpace(answer) - ) { - continue - } - - if ( - SUtils.NormalizeSpaces( - SUtils.RemoveUnnecesarySpaces(correct) - ).includes(answer) - ) { - // if the correct answer includes the current answer - toColor.push(i) // adding the index - type = MPM.GetInputType(answers, i) // setting the type - } - } - } - if (results[0].match === 100) { - // if the result is 100% correct - if (type !== 'radio' || toColor.length === 1) { - // FIXME why not radio - for (let i = 0; i < toColor.length; i++) { - // going through "toColor" - let highlight = createHoverOver(answers[toColor[i]]) - Object.assign(highlight.style, { - border: '4px solid rgba(100, 240, 100, 0.8)', - borderRadius: '10px', - }) - } - } - } // and coloring the correct index - } - } catch (e) { - // catching errors. Sometimes there are random errors, wich i did not test, but they are rare, and does not break the main script. - Log('script error at highlightin answer: ' + e.message) - } } // : }}} @@ -1570,7 +1296,7 @@ const SetQuestionText = () => { var relevantQuestion = GetRelevantQuestion() - questionTextElement.innerText = SUtils.removeMultipleEnters( + questionTextElement.innerText = removeUnnecesarySpaces( relevantQuestion.m ) if (currItem === 0 && currRelevantQuestion === 0) {