diff --git a/stable.user.js b/stable.user.js index 63b4d24..2d80b44 100755 --- a/stable.user.js +++ b/stable.user.js @@ -21,7 +21,7 @@ // ==UserScript== // @name Moodle/Elearning/KMOOC test help -// @version 1.7.0.0 +// @version 2.0.0.0 // @description Online Moodle/Elearning/KMOOC test help // @author MrFry // @match https://elearning.uni-obuda.hu/main/* @@ -62,7 +62,7 @@ // forcing pages for testing. unless you test, do not set these to true! // only one of these should be true for testing - const forceTestPage = false + const forceTestPage = true const forceResultPage = false const forceDefaultPage = false const logElementGetting = false @@ -77,8 +77,8 @@ lastChangeLog: '- "Húzza a megfelelő helyre ..." kérdés lekezelése\n- Kód refactor\n- Ha valami elszállt: feedback pls', fatalError: 'Fatál error. Check console (f12). Kattints az üzenetre az összes kérdés/válaszért manuális kereséshez!', consoleErrorInfo: 'Itteni hibák 100% a moodle hiba. Kivéve, ha oda van írva hogy script error ;) Ha ilyesmi szerepel itt, akkor olvasd el a segítség szekciót!', - freshStartWarning: '

Moodle teszt userscript:

1.5.0 verzió: a script mostantól XMLHTTP kéréseket küld szerver fele! Erre a userscript futtató kiegészitőd is figyelmeztetni fog! Ha ez történik, a script rendes működése érdekében engedélyezd (Always allow domain)! Ha nem akarod, hogy ez történjen, akkor ne engedélyezd, vagy a menüben válaszd ki a "helyi fájl használata" opciót!

Elküldött adatok: minden teszt után a kérdés-válasz páros. Fogadott adatok: Az összes eddig ismert kérdés. Érdemes help-et elolvasni!!!

Ez az ablak frissités után eltűnik. Ha nem, akkor a visza gombbal próbálkozz.
', - noResult: 'Nincs találat :( Kattints az üzenetre az összes kérdés/válaszért manuális kereséshez! Előfordulhat, hogy a tárgyat nem válsztottad ki a menüben.', + freshStartWarning: '

Moodle teszt userscript:

1.5.0 verzió: a script mostantól XMLHTTP kéréseket küld szerver fele! Erre a userscript futtató kiegészítőd is figyelmeztetni fog! Ha ez történik, a script rendes működése érdekében engedélyezd (Always allow domain)! Ha nem akarod, hogy ez történjen, akkor ne engedélyezd, vagy a menüben válaszd ki a "helyi fájl használata" opciót!

Elküldött adatok: minden teszt után a kérdés-válasz páros. Fogadott adatok: Az összes eddig ismert kérdés. Érdemes help-et elolvasni!!!

Ez az ablak frissités után eltűnik. Ha nem, akkor a visza gombbal próbálkozz.
', + noResult: 'Nincs találat :( Kattints az üzenetre az összes kérdés/válaszért manuális kereséshez! Előfordulhat, hogy a tárgyat nem választottad ki a menüben.', videoHelp: 'Miután elindítottad: Play/pause: space. Seek: Bal/jobb nyíl.', menuButtonText: 'Kérdések Menu', couldntLoadDataPopupMenuText: 'A kérdéseket nem lehetett beolvasni, ellenőrizd hogy elérhető-e a szerver', @@ -87,13 +87,15 @@ help: 'Help', websiteBugreport: 'Weboldal / Bug report', donate: 'Donate', + retry: 'Újrapróbálás', search: 'Keresés ...', loading: 'Betöltés ...', noServer: 'Nem elérhető a szerver!', passiveModeActivated: 'Passzív mód bekapcsolva, nem lesz mostantól a szerver piszkálva', passiveModeDeactivated: 'Passzív mód kikapcsolva, frissíts az érvénybe lépéshez!', passiveMode: 'Passzív mód', - passiveModeMenuBoxText: 'Passzív mód aktív' + passiveModeMenuBoxText: 'Passzív mód aktív', + noServerConsoleMessage: `Nem elérhető a szerver, vagy kis eséllyel kezeletlen hiba történt! Ha elérhető a weboldal, akkor ott meg bírod nézni a kérdéseket itt: ${serverAdress}legacy` } var texts = huTexts @@ -117,6 +119,7 @@ if (!val) { throw new Error('Assertion failed') } } + // TODO: check if someting is not used class StringUtils { RemoveStuff (value, removableStrings, toReplace) { removableStrings.forEach((x) => { @@ -688,11 +691,7 @@ console.time('main') timerStarted = true - Init(AfterLoad) - - if (forceTestPage || forceResultPage || forceDefaultPage) { - if (document.getElementById('scriptMessage')) { document.getElementById('scriptMessage').style.background = 'green' } - } + Init() } function AfterLoad () { @@ -725,6 +724,12 @@ console.timeEnd('main') timerStarted = false } + + if (forceTestPage || forceResultPage || forceDefaultPage) { + if (document.getElementById('scriptMessage')) { + document.getElementById('scriptMessage').style.background = 'green' + } + } } // : }}} @@ -732,7 +737,7 @@ // : Loading {{{ - function Init (cwith) { + function Init () { if (false) { // eslint-disable-line setVal('version16', undefined) setVal('version15', undefined) @@ -763,11 +768,12 @@ VersionActions() if (!url.includes('.pdf')) { ShowMenu() } if (!getVal('skipLoad')) { - ConnectToServer(cwith) + ConnectToServer(AfterLoad) } } function ConnectToServer (cwith) { + ClearAllMessages() GetXHRInfos().then((inf) => { lastestVersion = inf.version motd = inf.motd @@ -776,11 +782,23 @@ // FIXME: if cwith() throws an unhandled error it sais server is not avaible cwith() }).catch(() => { - document.getElementById('menuButtonDiv').style.backgroundColor = 'red' - document.getElementById('infoMainDiv').innerText = texts.noServer + NoServerAction() }) } + function NoServerAction () { + SafeGetElementById('menuButtonDiv', (elem) => { + elem.style.backgroundColor = 'red' + }) + SafeGetElementById('infoMainDiv', (elem) => { + elem.innerText = texts.noServer + }) + SafeGetElementById('retryButton', (elem) => { + elem.style.display = '' + }) + Log(texts.noServerConsoleMessage) + } + function VersionActions () { // FOR TESTING ONLY // setVal("version15", true); @@ -1205,6 +1223,10 @@ // : }}} // : Minor UI stuff {{{ + function ClearAllMessages () { + // TODO + // mainDiv.setAttribute('id', 'messageMainDiv') + } // shows a message with "msg" text, "matchPercent" tip and transp, and "timeout" time function ShowMessage (msgItem, timeout, funct) { @@ -1453,9 +1475,7 @@ let buttonStyle = { position: '', - left: 10 + 'px', margin: '5px 5px 5px 5px', - top: 10 + 'px', border: 'none', backgroundColor: '#222d32', color: '#ffffff', @@ -1479,7 +1499,6 @@ }) // donate link ---------------------------------------------------------------------------------------------------------------- - let donateLink = CreateNodeWithText(buttonCell, texts.donate, 'button') SetStyle(donateLink, buttonStyle) @@ -1493,14 +1512,41 @@ menuButtonDiv.style.top = (window.innerHeight - 70) + 'px' }) + // INFO TABEL -------------------------------------------------------------------- + var itbl = document.createElement('table') + SetStyle(itbl, { + margin: '5px 5px 5px 5px', + textAlign: 'left', + width: '98%' + }) + menuButtonDiv.appendChild(itbl) + var ibuttonRow = tbl.insertRow() + var ibuttonCell = ibuttonRow.insertCell() + ibuttonCell.style.textAlign = 'center' + // INFO DIV --------------------------------------------------------------------------------- - let infoDiv = CreateNodeWithText(menuButtonDiv, texts.loading, 'div') + let infoDiv = CreateNodeWithText(ibuttonCell, texts.loading, 'span') infoDiv.setAttribute('id', 'infoMainDiv') SetStyle(infoDiv, { color: '#ffffff', margin: '5px' }) + // retry button ---------------------------------------------------------------------------------------------------------------- + let retryButton = CreateNodeWithText(ibuttonCell, texts.retry, 'button') + SetStyle(retryButton, buttonStyle) + retryButton.style.display = 'none' + retryButton.setAttribute('id', 'retryButton') + + retryButton.addEventListener('click', function () { + ConnectToServer(AfterLoad) + }) + + // window resize event listener --------------------------------------- + addEventListener(window, 'resize', function () { + menuButtonDiv.style.top = (window.innerHeight - 70) + 'px' + }) + // passive button ---------------------------------------------------------------------------------------------------------------- let passiveButton = CreateNodeWithText(buttonCell, texts.passiveMode, 'button') SetStyle(passiveButton, buttonStyle) @@ -1552,6 +1598,15 @@ } } + function SafeGetElementById (id, todo) { + let element = document.getElementById(id) + if (element) { + todo(element) + } else { + Log(`Unable to safe get element by id: ${id}`) + } + } + function SetStyle (target, style) { Object.keys(style).sort().forEach((key) => { target.style[key] = style[key]