- // ==UserScript==
- // @name AnkiWeb Quiz
- // @namespace https://greasyfork.org/users/102866
- // @description Shows quiz on ankiweb
- // @include https://ankiweb.net/*
- // @include http://ankiweb.net/*
- // @require https://code.jquery.com/jquery-3.2.1.min.js
- // @author TiLied
- // @version 1.2.3
- // @grant GM_listValues
- // @grant GM_deleteValue
- // @grant GM_getValue
- // @grant GM_setValue
- // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
- // @grant GM.listValues
- // @grant GM.getValue
- // @grant GM.setValue
- // @grant GM.deleteValue
- // ==/UserScript==
-
- //not empty val
- var std = window.eval("require('study').default;"),
- defaultDeck = new Deck("question default", "answer default", 10001, 20002),
- defaultDecks =
- {
- defaultId: new Decks(defaultDeck)
- }
-
- //const
- const inBstring = "<awq>",
- inEstring = "</awq>",
- inBegAnswer = "<awq_answer>",
- inEndAnswer = "</awq_answer>",
- textDefault = "You need to use this deck more to get more variations";
-
- //arrays
- var stringArray = [],
- tempStrings = [],
- falseAnswers = [],
- inB = [],
- inE = [],
- buttons = [],
- tempArr = [];
-
- //empty val
- var searchFor,
- trueAnswer,
- trueId,
- id,
- rubyVal,
- deck;
-
- //prefs
- var amountButtons,
- debug,
- decks,
- lastIdChosen;
-
- void function Main()
- {
- //Place CSS in head
- CssAdd();
- //Set settings or create
- SetSettings();
- //Set event on decks page
- SetEventsOnDecks(document.URL);
- }();
-
- //Settings
- function SetSettings()
- {
- const settings = $("<li class=nav-item></li>").html("<a id=awq_settings class=nav-link>Settings Ankiweb Quiz " + GM.info.script.version + "</a> \
- <div id=awq_settingsPanel class=awq_settingsP>\
- <form> \
- <br> \
- Amount Buttons(4-20):<input type=number name=amountBtn id=awq_amountBtn min=4 max=20 value=4></input><br> \
- Debug: <input type=checkbox name=debug id=awq_debug></input>\
- </form>\
- <button id=hideButton class=awq_style>Hide</button>\
- </div>\
- ");
-
- $(".navbar-nav:first").append(settings);
- $("#awq_settings").addClass("awq_settings");
- $("#awq_settingsPanel").hide();
- SetEventSettings();
- LoadSettings();
- }
-
- async function LoadSettings()
- {
-
- DeleteValues("old");
-
- //THIS IS ABOUT DEBUG
- if (await HasValue("awq_debug", false))
- {
- debug = await GM.getValue("awq_debug");
- $("#awq_debug").prop("checked", debug);
- }
-
- //THIS IS ABOUT DECKS
- if (await HasValue("awq_decks", JSON.stringify(defaultDecks)))
- {
- decks = JSON.parse(await GM.getValue("awq_decks"));
- //console.log(decks);
- }
-
- //THIS IS ABOUT lastIdChosen
- if (await HasValue("awq_lastIdChosen", 000))
- {
- lastIdChosen = await GM.getValue("awq_lastIdChosen");
- GetDeck(lastIdChosen);
- }
-
- //THIS IS ABOUT BUTTONS
- if (await HasValue("awq_amountButtons", 8))
- {
- amountButtons = await GM.getValue("awq_amountButtons");
- $("#awq_amountBtn").prop("value", amountButtons);
- }
-
- //Console log prefs with value
- console.log("*prefs:");
- console.log("*-----*");
- var vals = await GM.listValues();
-
- for (var i = 0; i < vals.length; i++)
- {
- console.log("*" + vals[i] + ":" + await GM.getValue(vals[i]));
- }
- console.log("*-----*");
- }
-
- //Check if value exists or not. optValue = Optional
- async function HasValue(nameVal, optValue)
- {
- var vals = await GM.listValues();
-
- if (vals.length === 0)
- {
- if (optValue != undefined)
- {
- GM.setValue(nameVal, optValue);
- return true;
- } else
- {
- return false;
- }
- }
-
- for (var i = 0; i < vals.length; i++)
- {
- if (vals[i] === nameVal)
- {
- return true;
- }
- }
-
- if (optValue != undefined)
- {
- GM.setValue(nameVal, optValue);
- return true;
- } else
- {
- return false;
- }
- }
-
- //Delete Values
- async function DeleteValues(nameVal)
- {
- var vals = await GM.listValues();
-
- if (vals.length === 0 || typeof nameVal != "string")
- {
- return;
- }
-
- switch (nameVal)
- {
- case "all":
- for (var i = 0; i < vals.length; i++)
- {
- GM.deleteValue(vals[i]);
- }
- break;
- case "old":
- for (var i = 0; i < vals.length; i++)
- {
- if (vals[i] === "debug" || vals[i] === "debugA" || vals[i] === "awq_amountBtn")
- {
- GM.deleteValue(vals[i]);
- }
- }
- break;
- default:
- for (var i = 0; i < vals.length; i++)
- {
- if (vals[i] === nameVal)
- {
- GM.deleteValue(nameVal);
- }
- }
- break;
- }
- }
-
- //Construction of Deck
- function Deck(question, answer, idTimeOne, idTimeTwo)
- {
- this.question = [question];
- this.answer = [answer];
- this.idTimeOne = [idTimeOne];
- this.idTimeTwo = [idTimeTwo];
- }
-
- //Construction of Decks
- function Decks(cards)
- {
- this.cards = cards;
- this.updateDeck = false;
- this.firstTime = true;
- this.customSettings = {};
- };
-
- function SetEventSettings()
- {
- $("#awq_settings").click(function ()
- {
- $("#awq_settingsPanel").toggle(1000);
- });
-
- $("#hideButton").click(function ()
- {
- $("#awq_settingsPanel").toggle(1000);
- });
-
- $("#awq_debug").change(function ()
- {
- GM.setValue("awq_debug", $(this).prop("checked"));
- debug = $(this).prop("checked");
- alert("Settings has been changed. Please reload the page.");
- });
-
- $("#awq_amountBtn").change(function ()
- {
- GM.setValue("awq_amountButtons", $(this).prop("value"));
- amountButtons = $(this).prop("value");
- alert("Settings has been changed. Please reload the page.");
- });
- }
-
- function SetEventsOnDecks(url)
- {
- if (url.match(/http:\/\/ankiweb\.net\/decks/i) || url.match(/https:\/\/ankiweb\.net\/decks/i))
- {
- $("div.light-bottom-border > div:first-child > button").on("mousedown", function ()
- {
- lastIdChosen = this.id;
- GM.setValue("awq_lastIdChosen", lastIdChosen);
- });
- } else
- {
- return;
- }
- }
-
- function SetEventsOnStudy(url)
- {
- if (url.match(/http:\/\/ankiweb\.net\/study/i) || url.match(/https:\/\/ankiweb\.net\/study/i))
- {
- $("#leftStudyMenu a:first-child").on("mouseover", function ()
- {
- try
- {
- UpdateGMDecks();
- console.log("UpdateGM");
- } catch (e) { console.log(e); }
- });
- } else
- {
- return;
- }
- }
-
- function FindIndexes(searchStr, str, caseSensitive)
- {
- var searchStrLen = searchStr.length;
- if (searchStrLen == 0)
- {
- return [];
- }
- var startIndex = 0, index, indices = [];
- if (!caseSensitive)
- {
- str = str.toLowerCase();
- searchStr = searchStr.toLowerCase();
- }
- while ((index = str.indexOf(searchStr, startIndex)) > -1)
- {
- indices.push(index);
- startIndex = index + searchStrLen;
- }
- return indices;
- }
-
- //css styles adds
- function CssAdd()
- {
- $("head").append($("<!--Start of AnkiWeb Quiz v" + GM.info.script.version + " CSS-->"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_btn { \
- \
- }"));
-
- $("head").append($("<style type=text/css></style>").text("a.awq_settings { \
- cursor: pointer;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("div.awq_settingsP { \
- position:absolute; width:300px; background-color: #fff; border-color: #eee!important; border-radius: .3rem; border: 2px solid transparent; z-index: 150;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_style { \
- cursor: pointer; color: #fff; background-color: #0275d8; border-color: #0275d8; padding: .75rem 1.5rem; font-size: 1rem; border-radius: .3rem; border: 1px solid transparent; max-width:200px; margin:5px;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_style:hover { \
- cursor: pointer; color: #fff; background-color: #025aa5; border-color: #01549b; padding: .75rem 1.5rem; font-size: 1rem; border-radius: .3rem; border: 1px solid transparent;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("div.awq_rstyle { \
- width:100%; margin-top:30px; z-index: 100;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_true { \
- background-color: #75d802; border-color: #75d802;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_true:hover { \
- background-color: #5aa502; border-color: #5aa502;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_false { \
- background-color: #d80275; border-color: #d80275;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_first { \
- background-color: #000; border-color: #000;\
- }"));
-
- $("head").append($("<style type=text/css></style>").text("button.awq_false:hover { \
- background-color: #a5025a; border-color: #a5025a;\
- }"));
-
- $("head").append($("<!--End of AnkiWeb Quiz v" + GM.info.script.version + " CSS-->"));
- }
-
- function GetDeck(idDeck)
- {
- var keyNames = Object.keys(decks);
- for (var i in keyNames)
- {
- if (idDeck == keyNames[i])
- {
- deck = decks[idDeck].cards;
- return;
- }
- }
-
- if (deck == undefined)
- {
- decks[idDeck] = new Decks(defaultDeck);
- deck = decks[idDeck].cards;
- return;
- }
- }
-
- //THIS FUNC FOR UPDATING Greasemonkey value JSON OBJECT
- function UpdateGMDecks()
- {
- try
- {
- if (deck["answer"].length < amountButtons)
- {
- decks[lastIdChosen].firstTime = true;
- }
-
- var gmDecks = JSON.stringify(decks);
- GM.setValue("awq_decks", gmDecks);
- }
- catch (e)
- {
- console.log(e);
- }
- }
-
- $(document).ready(function ()
- {
-
- // Append some text to the element with id someText using the jQuery library.
- //$("#studynow").append(" more text...................");
- $("#studynow").click(function ()
- {
- setTimeout(function ()
- {
- SetUI();
- SetEventsOnStudy(document.URL);
- if (decks[lastIdChosen].firstTime == true)
- {
- FirstTimeDeck(std.currentCard, std["deck"].cards);
- } else
- {
- var question = $.trim(StripNewLines(StripTags(std.currentCard[1].replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- answer = $.trim(StripNewLines(StripTags(std.currentCard[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- idTimeOne = std.currentCard[0],
- idTimeTwo = std.currentCard[4];
- UpdateDeck(question, answer, idTimeOne, idTimeTwo);
- }
- //searchFor = SearchQuestion();
- if (debug)
- {
- console.log(std);
- console.log("---");
- //console.log($.trim(StripNewLines(StripTags(asd[1].replace(/<style>[\s\S]*?<\/style>/ig, '')))));
- //console.log($.trim(StripNewLines(StripTags(asd[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))));
- console.log("---");
- //console.log("FirstTime:" + decks[lastIdChosen].firstTime);
- console.log(decks);
- console.log($.trim($("#rightStudyMenu").text()).split("+"));
- //console.log("searchFor:" + searchFor);
- }
- //GetTrueAnswer(searchFor);
- GetTrueAnswerU(std.currentCard[0], std.currentCard[4]);
- if (debug)
- {
- console.log('Study Click');
- }
- }, 1500);
- });
-
- function NumberOfButtons()
- {
- var buttons = "";
- for (var i = 0; i < amountButtons; i++)
- {
- buttons += "<button class=awq_btn></button>";
- }
- return buttons;
- }
-
- //THIS FUNC FOR FIRST TIME USING DECK AFteR INSTALL SCRIPT
- function FirstTimeDeck(currentCard, nextCards)
- {
- var questions = [$.trim(StripNewLines(StripTags(currentCard[1].replace(/<style>[\s\S]*?<\/style>/ig, ''))))],
- answers = [$.trim(StripNewLines(StripTags(currentCard[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, ''))))],
- idTimeOnes = [currentCard[0]],
- idTimeTwos = [currentCard[4]];
-
- for (var i = 0; i < nextCards.length; i++)
- {
- questions.push($.trim(StripNewLines(StripTags(nextCards[i][1].replace(/<style>[\s\S]*?<\/style>/ig, '')))));
- answers.push($.trim(StripNewLines(StripTags(nextCards[i][2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))));
- idTimeOnes.push(nextCards[i][0]);
- idTimeTwos.push(nextCards[i][4]);
- }
-
- for (var i = 0; i < questions.length; i++)
- {
- UpdateDeck(questions[i], answers[i], idTimeOnes[i], idTimeTwos[i]);
- }
-
- decks[lastIdChosen].firstTime = false;
- }
-
- //THIS FUNC FOR UPDATING DECK OBJECT
- function UpdateDeck(question, answer, idTimeOne, idTimeTwo)
- {
- //TODO FORCE UPDATE
- if (question.length >= 350)
- {
- question = "CARD TOO LONG: " + question.slice(0, 350);
- }
-
- if (answer.length >= 350)
- {
- answer = "CARD TOO LONG: " + answer.slice(0, 350);
- }
-
- //CHECK FOR REPEAT
- for (var i = 0; i < deck["idTimeOne"].length; i++)
- {
- if (idTimeOne === deck["idTimeOne"][i] && idTimeTwo === deck["idTimeTwo"][i])
- {
- return;
- }
- }
-
- //First time deck detected(delete default card)
- if (deck["idTimeOne"][0] === 10001 && deck["idTimeTwo"][0] === 20002)
- {
- deck["question"][0] = question;
- deck["answer"][0] = answer;
- deck["idTimeOne"][0] = idTimeOne;
- deck["idTimeTwo"][0] = idTimeTwo;
- } else
- {
- deck["question"].push(question);
- deck["answer"].push(answer);
- deck["idTimeOne"].push(idTimeOne);
- deck["idTimeTwo"].push(idTimeTwo);
- }
- }
-
- function SetUI()
- {
- const buttonP = $("<button id=awq_quiz class=btn style=margin-left:4px></button>").text("Quiz");
- const button = $("<div class=awq_rstyle></div>").html(NumberOfButtons());
-
- $(".pt-1").before("<br>");
- $(".pt-1").before(button);
-
- $("#leftStudyMenu").after(buttonP);
-
- SettingsEvents();
-
- $("#awq_quiz").addClass("btn-secondary");
- $(".awq_btn").addClass("awq_style");
- $(".awq_rstyle").hide();
- }
-
- function SettingsEvents()
- {
-
- $("#awq_quiz").click(function ()
- {
- $(".awq_rstyle").toggle();
- });
-
- $("#ansbuta").click(function ()
- {
- CheckStatus($.trim($("#rightStudyMenu").text()).split("+"));
- setTimeout(function ()
- {
- if (debug)
- {
- console.log("Button check");
- }
- $("#ease1").click(function ()
- {
- OtherEventU();
- //OtherEvent();
- });
- $("#ease2").click(function ()
- {
- OtherEventU();
- //OtherEvent();
- });
- $("#ease3").click(function ()
- {
- OtherEventU();
- //OtherEvent();
- });
- $("#ease4").click(function ()
- {
- OtherEventU();
- //OtherEvent();
- });
- }, 250);
- });
-
- $(".awq_btn").click(function ()
- {
- if (debug)
- {
- if ($(this).attr("title"))
- {
- console.log("html:" + $(this).attr("title"));
- console.log("true:" + trueAnswer);
- } else
- {
- console.log("html:" + $(this).html());
- console.log("text:" + $(this).text());
- console.log("------------------------");
- console.log("true:" + trueAnswer);
- console.log("************************");
- }
- }
-
- if ($(this).attr("title"))
- {
- if (trueAnswer == $(this).attr("title"))
- {
- $(this).addClass("awq_true");
- } else
- {
- $(this).addClass("awq_false");
- }
- } else
- {
- if (trueAnswer == $(this).html() || trueAnswer == $(this).text())
- {
- $(this).addClass("awq_true");
- } else
- {
- $(this).addClass("awq_false");
- }
- }
- });
- }
-
- function CheckStatus(statusArr)
- {
- var one = parseInt(statusArr[0]),
- two = parseInt(statusArr[1]),
- tree = parseInt(statusArr[2]);
- if (debug)
- {
- console.log(one);
- console.log(two);
- console.log(tree);
- }
- if ((one + two + tree) === 0)
- {
- UpdateGMDecks();
- } else
- {
- return;
- }
- }
-
- function EscapeRegExp(string)
- {
- return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
- }
-
- function SearchQuestion()
- {
- if (debug)
- {
- console.log("span: ");
- console.log($("awq_question").has("span"));
- }
- if ($("awq_question").has("span").length >= 1)
- {
- var contentText = $("awq_question").contents().filter(function ()
- {
- return this.nodeType == 3;
- });
-
- var contentSpan = $("awq_question").contents().filter("span");
-
- if (debug)
- {
- console.log(contentText);
- console.log(contentSpan);
- }
-
- rubyVal = "";
- var x = 0;
- if (contentText >= contentSpan)
- {
- for (var i = 0; i < contentText.length; i++)
- {
- rubyVal += $.trim(contentText[i].nodeValue);
- if (x < contentSpan.length)
- {
- rubyVal += "<ruby><rb>";
- rubyVal += $.trim($(contentSpan[x]).contents().filter(function ()
- {
- return this.nodeType == 3;
- })[0].nodeValue) + "</rb><rt>";
- rubyVal += $(contentSpan[x]).contents()[0].innerHTML + "</rt></ruby>";
- x++;
- }
- }
- } else
- {
- for (var i = 0; i < contentSpan.length; i++)
- {
- if (x < contentText.length)
- {
- rubyVal += $.trim(contentText[x].nodeValue);
- x++;
- }
- rubyVal += "<ruby><rb>";
- rubyVal += $.trim($(contentSpan[i]).contents().filter(function ()
- {
- return this.nodeType == 3;
- })[0].nodeValue) + "</rb><rt>";
- rubyVal += $(contentSpan[i]).contents()[0].innerHTML + "</rt></ruby>";
- }
- }
- return rubyVal;
- } else
- {
- return $.trim($("awq_question").text());
- }
- }
-
- //Replace wrong <br>'s or other html tags, should work perfectly but it isn't >:( Fixed(probably)
- function ReplaceString(str)
- {
- var trueString = str;
-
- while (trueString.search("<br />") !== -1)
- {
- trueString = str.replace(/<br \/>/g, "<br>");
- }
-
- return trueString;
- }
-
- function GetTrueAnswerU(idOne, idTwo)
- {
- for (var i = 0; i < deck["idTimeOne"].length; i++)
- {
- if (idOne === deck["idTimeOne"][i] && idTwo === deck["idTimeTwo"][i])
- {
- trueAnswer = deck["answer"][i];
- trueId = i;
- GetFalseAnswersU(trueId);
- return;
- }
- }
- }
-
- function GetFalseAnswersU(trueId)
- {
- tempArr.length = 0;
- if (deck["answer"].length <= amountButtons)
- {
- var temp = [];
- temp = temp.concat(deck["answer"]);
- if (debug)
- {
- console.log(temp);
- }
- for (var i = 0; i < (amountButtons - (deck["answer"].length - 1)); i++)
- {
- temp.push(textDefault);
- }
- if (debug)
- {
- console.log(temp);
- }
- }
- for (var i = 0; i < (amountButtons - 1); i++)
- {
- if (deck["answer"].length > amountButtons)
- {
- id = GetRand(deck["answer"]);
- if (id != trueId)
- {
- if (debug)
- {
- console.log(deck["answer"][id]);
- }
- falseAnswers[i] = deck["answer"][id];
- if (debug)
- {
- console.log("***False answer " + i + " : " + falseAnswers[i] + " id: " + id);
- //console.log("inBegAnswer: " + str.indexOf(inBegAnswer) + " : " + str.indexOf(inEndAnswer) + " inEndAnswer");
- }
- } else if (id === 0 || id === trueId)
- {
- id = GetRand(deck["answer"]);
- i--;
- }
- } else
- {
- id = GetRand(temp);
- if (id != trueId)
- {
- if (debug)
- {
- console.log(temp[id]);
- }
- falseAnswers[i] = temp[id];
- if (debug)
- {
- console.log("***False answer " + i + " : " + falseAnswers[i] + " id: " + id);
- //console.log("inBegAnswer: " + str.indexOf(inBegAnswer) + " : " + str.indexOf(inEndAnswer) + " inEndAnswer");
- }
- } else
- {
- id = GetRand(temp);
- i--;
- }
- }
- }
- RamdomButton();
- }
-
- function OtherEventU()
- {
- if (debug)
- {
- console.log("Button click");
- console.log("---------------");
- //console.log(std.currentCard);
- //console.log($("awq").text().length);
- }
-
- //event on Edit button
- SetEventsOnStudy(document.URL);
-
- $(".awq_rstyle").hide();
- $(".awq_btn").removeClass("awq_first");
- if (std.currentCard == undefined)
- {
- setTimeout(function ()
- {
- if (std.currentCard == undefined)
- {
- setTimeout(function ()
- {
- var question = $.trim(StripNewLines(StripTags(std.currentCard[1].replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- answer = $.trim(StripNewLines(StripTags(std.currentCard[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- idTimeOne = std.currentCard[0],
- idTimeTwo = std.currentCard[4];
- UpdateDeck(question, answer, idTimeOne, idTimeTwo);
- GetTrueAnswerU(idTimeOne, idTimeTwo);
- }, 3000);
- } else
- {
- var question = $.trim(StripNewLines(StripTags(std.currentCard[1].replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- answer = $.trim(StripNewLines(StripTags(std.currentCard[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- idTimeOne = std.currentCard[0],
- idTimeTwo = std.currentCard[4];
- UpdateDeck(question, answer, idTimeOne, idTimeTwo);
- GetTrueAnswerU(idTimeOne, idTimeTwo);
- }
- }, 1000);
- } else
- {
- var question = $.trim(StripNewLines(StripTags(std.currentCard[1].replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- answer = $.trim(StripNewLines(StripTags(std.currentCard[2].replace(/[\s\S]*?(<hr id=answer>)/ig, '').replace(/<style>[\s\S]*?<\/style>/ig, '')))),
- idTimeOne = std.currentCard[0],
- idTimeTwo = std.currentCard[4];
- UpdateDeck(question, answer, idTimeOne, idTimeTwo);
- GetTrueAnswerU(idTimeOne, idTimeTwo);
- }
- }
-
- //
- //random functions
- function InArray(array, el)
- {
- for (var i = 0; i < array.length; i++)
- if (array[i] == el) return true;
- return false;
- }
-
- function GetRand(array)
- {
- var rand = Math.floor(Math.random() * array.length);
- if (!InArray(tempArr, rand))
- {
- tempArr.push(rand);
- return rand;
- }
- return GetRand(array);
- }
- //end of random functions
- //
-
- function RamdomButton()
- {
- var allAnswers = [];
- buttons.length = 0;
- tempArr.length = 0;
- allAnswers[0] = trueAnswer;
- for (var i = 1; i <= falseAnswers.length; i++)
- {
- allAnswers[i] = falseAnswers[i - 1];
- }
- if (debug)
- {
- console.log("False answers :");
- console.log(falseAnswers);
- console.log("ALL answers :");
- console.log(allAnswers);
- }
- for (var i = 0; i < allAnswers.length; i++)
- {
- buttons[i] = $.trim(allAnswers[GetRand(allAnswers)]);
- }
- if (debug)
- {
- console.log("Random order :) = " + buttons);
- // console.log($(".awq_LeftSide").html());
- }
- UiButtons();
- }
-
- function UiButtons()
- {
- const sel = document.querySelectorAll("button.awq_btn");
- if (debug)
- {
- console.log("*HERE UI BUTTONS :");
- }
-
- for (var i = 0; i < buttons.length; i++)
- {
- //Delete arttribute
- if ($(sel[i]).attr("title"))
- {
- $(sel[i]).removeAttr("title");
- }
-
- if (buttons[i].length <= 40 || buttons[i].includes("</ruby>"))
- {
- $(sel[i]).html(buttons[i]);
- } else
- {
- $(sel[i]).html(buttons[i].slice(0, 40) + "...");
- $(sel[i]).attr("title", buttons[i]);
-
- //change color of button with textDefault
- if ($(sel[i]).attr("title") == textDefault)
- {
- $(sel[i]).addClass("awq_first");
- }
- }
-
- if (debug)
- {
- //console.log($(sel[i]).attr("title"));
- console.log(buttons[i] + " Length: " + buttons[i].length);
- console.log(buttons[i].includes("</ruby>"));
- }
- }
-
-
- CheckPresedButtons();
- }
-
- function CheckPresedButtons()
- {
- $(".awq_btn").removeClass("awq_true");
- $(".awq_btn").removeClass("awq_false");
- //$(".awq_btn").removeClass("awq_first");
- }
-
- console.log("AnkiWeb Quiz v" + GM.info.script.version + " initialization");
- });
-
- function StripTags(string)
- {
- return string.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?(\/)?>|<\/\w+>/gi, '');
- }
-
- function StripNewLines(string)
- {
- return string.replace(/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/gi, '\n');
- }
- // ------------
- // TODO
- // ------------
-
- /* TODO STARTS
- ✓ 0)REWRITE EVERYTHING WITHOUT USING GETRESOURCE AND CHANGING CODE //DONE 1.0.0
- 0.1)Make custom settings
- 0.2)Make force update deck (Because once you updated card, in gm_value will be old version of card)
- ✓ 1)Make it only one element of buttons //DONE 0.0.9
- ✓ 1.1)Increase numbers of buttons to 10-12(optional through settings???) //DONE 1.1.0
- ✓ 2)Make it limit of length answer and put whole in attribute title //DONE 0.1.0
- ✓ 3)Make it settings, almost done in 0.1.0 //DONE 0.2.0
- ✓ 3.1)Debug //DONE 0.1.0
- 3.2)Add txt file ***RESEARCH NEEDED***
- 3.2.1)Choose them
- 3.3)Make it always show quiz
- ✓ 4)Make it full functionality of Japanese deck, partial done in 0.0.8 //DONE 0.0.9 Happy with that :)
- 5)Search question in between tags <awq_question> and </awq_question> not in whole sentence, almost done in 0.1.2
- ✓ 6)TODO for loop in finding question NEED TEST IT //DONE 0.1.7 BROKEN //DONE 0.1.9
- ✓ 7)Support GM4+, GM3 and other userscript extensions, beta 1.2.0 //DONE 1.2.3
- 7.1)DELETE CALLBACK!!!
- TODO ENDS */