var questions = { "ex_2_1_1": { count: 1, varcount: 3, type: "sortf", // sorting - drag groups: [ { label: "Нарицательные существительные", variants: [ "француз|", "какаду|", "умница|", "странник|", "испанец|", "роза|", "лилия|", ] }, { label: "Собственные существительные", variants: [ "Париж|название города", "«Отцы и дети»|название романа", "проспект Мира|название улицы/проспекта", "ГУМ|название магазина", "Испания|название страны", "Венера|название планеты", "площадь Свободы|название площади", "Роза|женское имя", "Лилия|женское имя", "«Вопросы языкознания»|название журнала", "МАПРЯЛ|название организации - Международная ассоциация преподавателей русского языка и литературы", "США|название государства", ] } ] }, "ex_2_1_2": { count: 1, type: "thf", // text with hints and feedback variants: [ "уважать {родители|родителей|одушевлённое существительное}", "воспитывать {дети|детей|одушевлённое существительное}", "пригласить {все сотрудники|всех сотрудников|одушевлённое существительное} фирмы", "лечить {звери|зверей|одушевлённое существительное}", "ловить {карпы|карпов|одушевлённое существительное}", "спрятать {игрушки|игрушки|неодушевлённое существительное}", "обратить внимание на {ваши замечания|ваши замечания|неодушевлённое существительное}", "обратить внимание на {наши друзья|наших друзей|одушевлённое существительное}", "наказать {все девочки|всех девочек|одушевлённое существительное}", "смотреть на {львы|львов|одушевлённое существительное}", "смотреть на {тигры|тигров|одушевлённое существительное}", "смотреть на {медведи|медведей|одушевлённое существительное}", "смотреть на {другие животные|других животных|одушевлённое существительное}", "найти {владельцы фирмы|владельцев фирмы|одушевлённое существительное}", "найти {правильные решения|правильные решения|неодушевлённое существительное} ", ] }, "ex_11_3_3": { count: 1, type: "translate", // text with gaps to fill + key variants: [ "{Saša něco čte a neposlouchá nás.|Саша что-то читает и не слушает нас.}", "{Kdyby se něco stalo, zavolej mi.|Если что-нибудь случится, позвони мне.}", "{Vezmi si nějaký teplý kabát.|Надень какое-нибудь тёплое пальто.}", "{Na stole leží něčí sešit.|На столе лежит чья-то тетрадь.}", "{Ať dojde někdo pro lékaře.|Пусть кто-нибудь сходит за врачом/доктором.}", "{U bratra mi zůstaly ještě nějaké knihy.|Ещё какие-то книги остались у брата.}", "{Četl někdo z vás tuto knihu?|Кто-нибудь из вас читал эту книгу?}", "{Kdyby někdo přišel, řekni, že nejsem doma.|Если кто-нибудь придёт, скажи, что меня нет дома.}", "{Můžeš mi půjčit nějakou zajímavou knížku?|Можешь мне дать/одолжить какую-нибудь интересную книжку?}", "{Koupil si nějakou knížku a celý den čte.|Он купил какую-то книжку и весь/целый день читает.}", "{Otvírám okno už potřetí, někdo ho vždy zavře.|Я открываю окно уже в третий раз, кто-то его постоянно закрывает.}", "{Mluvil jsi s někým o svém projektu?|Ты уже с кем-нибудь разговаривал о своём проекте?}", "{Zapomněla jsem ti něco říct.|Я забыла тебе кое-что/что-то сказать.}", "{Na něco bych se vás rád zeptal.|Я бы хотел вас о чём-то/кое о чём спросить.}", "{Dnes s vámi nepůjdu, musím ještě něco zařídit.|Сегодня я с вами не пойду, мне нужно ещё кое-что сделать.}", "{V létě chceme jet s Věrou někam do hor.|Летом мы с Верой хотим поехать куда-нибудь в горы.}", "{Hledala vás nějaká starší paní.|Вас искала какая-то пожилая женщина.}", "{Naposledy jsem tu byl někdy na podzim.|В последний раз я был здесь когда-то (давно) осенью.}", "{Kup si něco k večeři, dnes nemám čas, abych ti něco uvařila.|Купи что-нибудь на ужин, сегодня у меня нет времени что-то варить.}", ] } } Array.prototype.shuffle = function(local){ var a = this; var newArray = typeof local === "boolean" && local ? this : []; for (var i = 0, newIdx, curr, next; i < a.length; i++){ newIdx = Math.floor(Math.random()*i); curr = a[i]; next = a[newIdx]; newArray[i] = next; newArray[newIdx] = curr; } return newArray; }; function initQuestions(evt) { for (var key in questions) { var container = document.getElementById(key); var question = questions[key]; if (!container || !question ) continue; initQuestion(question); var form = getNextVariants(question); container.querySelector(".content").innerHTML = form; } } function initQuestion(question) { question.variants = question.variants.shuffle(); question.position = -1; } function getNextVariants(question) { question.correct = []; question.correctAnswers = []; var out = []; for (var i = 0; i < question.count; i++) { var index = (++question.position % question.variants.length); var variant = question.variants[index]; if (question.type == "v" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*[,\|]\s*/); var text = ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } if (question.type == "th" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*\|\s*/); var textLength = "" + Math.ceil(vals[1].length*0.65) + "em"; var text = "(" + vals[0]+ ") "; var cors = vals[1].split(/\//); trimValues(cors); question.correct.push(cors); text += ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } if (question.type == "tf" ) { var elems = variant.match(/\{([^}]+)\}/g); for (var j = 0; j < elems.length; j++) { var elem = elems[j] var vals = elem.substring(1, elem.length-1).trim().split(/\s*\/\s*/); var textLength = "" + Math.ceil(vals[0].length*0.65) + "em"; var text = " "; trimValues(vals); question.correct.push(vals); text += ""; variant = variant.replace(elem, text); } out.push("
") out.push(variant); out.push("
"); } } out.push("

" + templates.checker + "

"); return out.join(""); } function trimValues(arr) { for (var k = 0; k < arr.length; k++) { arr[k] = arr[k].trim(); } } var templates = { "th": "

{CONTENT}
", "v": "
{CONTENT}
", checker: "", nexter: "" } function checkQuestion(checker) { var form = checker.parentNode.parentNode.parentNode; var qid = form.id; if (qid == "") return; var question = questions[qid]; switch (question.type) { case "v": var elems = form.querySelectorAll(".testelement"); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; var sel = elem.querySelector("select"); var fb = elem.querySelector(".feedback"); sel.disabled = true; fb.innerHTML = ""; elem.classList.remove("correct"); elem.classList.remove("wrong"); if (sel.value == "---") continue; if (sel.value == question.correct[i]) { fb.innerHTML = "" elem.classList.add("correct"); } else { fb.innerHTML = " (*" + question.correctAnswers[i] + ")" elem.classList.add("wrong"); } } break; case "tf": case "th": var elems = form.querySelectorAll(".testelement"); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; var input = elem.querySelector("input"); var fb = elem.querySelector(".feedback"); input.disabled = true; fb.innerHTML = ""; elem.classList.remove("correct"); elem.classList.remove("wrong"); if (input.value == "") continue; var isCorrect = false; for (var j = 0; j < question.correct[i].length; j++) { if (input.value == question.correct[i][j]) { isCorrect = true; } } if (isCorrect) { fb.innerHTML = "" elem.classList.add("correct"); } else { fb.innerHTML = " (*" + question.correct[i].join("/") + ")" elem.classList.add("wrong"); } } break; } var toolbar = form.querySelector(".toolbar"); if (toolbar) { toolbar.innerHTML = templates.nexter; } console.log(question.correct); } function createNextForm(nexter) { var content = nexter.parentNode.parentNode; var form = content.parentNode; var question = questions[form.id]; content.innerHTML = getNextVariants(question); } window.addEventListener("load", initQuestions);