Files
gf-core/demos/TransQuiz/quiz_support.js
2011-11-01 13:22:24 +00:00

248 lines
6.1 KiB
JavaScript

// Copyright © Elnaz Abolahrar and Thomas Hallgren, 2011
function hide_element(elem_id)
{
document.getElementById(elem_id).style.display="none";
}
function show_element(elem_id)
{
document.getElementById(elem_id).style.display="";
}
function toggle_info()
{
if ( info_hidden == true )
{
show_element("info");
hide_element("toggle_show");
show_element("toggle_hide");
info_hidden = false;
}
else
{
hide_element("info");
show_element("toggle_show");
hide_element("toggle_hide");
info_hidden = true;
}
}
function show_word_magnets()
{
if ( words_hidden == true )
{
show_element("words");
words_hidden= false;
var buttons_bar=element("buttons_bar");
buttons_bar.removeChild(buttons_bar.lastChild);
}
}
function hide_word_magnets()
{
if ( words_hidden == false )
{
hide_element("words");
words_hidden= true;
//add "Show magnets" button
var buttons_bar=element("buttons_bar");
appendChildren(buttons_bar,
[ button("Show Magnets","show_word_magnets()","M", "show_magnets")]);
}
}
function popUp(newPage, pageName)
{
window.open(newPage, pageName, "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20");
}
function disable_all()
{
//disables the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons + user answer area
document.getElementById('check_answer').disabled = true;
document.getElementById('next_question').disabled = true;
document.getElementById('previous_question').disabled = true;
document.getElementById('hint').disabled = true;
document.getElementById('user_answer').disabled = true;
}
function set_mode()
{
//disable the grammar - To - From languages, and mode menubar
document.getElementById('grammar_menu').disabled = true;
document.getElementById('from_menu').disabled = true;
document.getElementById('to_menu').disabled = true;
document.getElementById('quiz_mode').disabled = true;
selected_mode = element("quiz_mode").value;
//sets the Quiz mode displayed
document.getElementById('mode').value = selected_mode;
/*-------------------------------------- Modes Settings --------------------------------------*/
switch (selected_mode)
{
case "Easy Study Mode":
have_minibar = true;
have_prevQuestion = true;
have_checkAns = true;
max_hint_times = 100;
break;
case "Medium Study Mode":
have_minibar = false;
have_prevQuestion = true;
have_checkAns = true;
max_hint_times = 3;
break;
case "Hard Study Mode":
have_minibar = false;
have_prevQuestion = false;
have_checkAns = true;
max_hint_times = 1;
break;
case "Exam Mode":
have_minibar = false;
have_prevQuestion = false;
have_checkAns = false;
max_hint_times = 0;
break;
}
}
function reset_mode()
{
//enable the grammar - To - From languages, and mode menubar
document.getElementById('grammar_menu').disabled = false;
document.getElementById('from_menu').disabled = false;
document.getElementById('to_menu').disabled = false;
document.getElementById('quiz_mode').disabled = false;
//clears the Quiz mode displayed
document.getElementById('mode').value = "";
}
function remove_minibar()
{
if (have_minibar && is_ended == false )
{
//hide the minibar word magnets
hide_element("minibar_contin");
//hide the delete and clear buttons
hide_element("minibar_buttons");
}
}
function remove_unwanted_characters(txt)
{
//removes digits, special characters and extra spaces from user's answer
txt = txt.replace(/[\u0021-\u0026 \u0028-\u0040 \u005b-\u0060 \u007b-\u007e]+/g,' ').replace(/^\s+|\s+$/g,'').replace(/\s+/g,' ');
//changes the first character to lowercase
txt= txt.replace(txt.charAt(0),txt.charAt(0).toLowerCase());
return txt;
}
function split_to_words(str)
{
if (!(str == "" || str == null))
str = str.split(" ");
else
str = "";
return str;
}
function string_matching(serv_answer,use_answer)
{
var result = new Array();
//for empty answers
if ( use_answer== "" || use_answer== null)
result= "";
else
{
var min_length = Math.min(serv_answer.length, use_answer.length);
var i=0;
for (i= 0; i < min_length; i++)
{
if (serv_answer[i] == use_answer[i])
result[i] = 1;
else
result[i] = 0;
}
//for answers with extra words (more than the number of words in the right answer)
while ( i < use_answer.length)
{
result[i] = 0;
i++;
}
}
return result;
}
function sum_all(arr) {
var s = 0;
for (var i = 0; i < arr.length; i++)
{
s += arr[i];
}
return s;
}
function find_closest(all_ans)
{
var best_match = new Array();
var comp = new Array();
var server_answer2 = new Array();
var max=0;
var k = 0;
for (k= 0; k < all_ans.length; k++)
{
server_answer = remove_unwanted_characters(all_ans[k]);
server_answer2 = split_to_words(server_answer);
comp = string_matching(server_answer2, user_answer_splited);
var sum = sum_all(comp);
if (sum >= max)
{
best_match = server_answer2;
max= sum;
}
}
return best_match;
}
function clearing()
{
//clears the question, answer and the explanation and hint display areas
document.question.question_text.value= "...";
document.answer.answer_text.value = "";
document.explanation.explanation_text.value= "";
document.getElementById("hint_txt").innerHTML = "";
}
//checks that the answer field is not empty
function check_notEmpty()
{
if (document.answer.answer_text.value == null || document.answer.answer_text.value =="")
{
alert(" You have to write something first!");
//sets the focus on the answer area
document.answer.answer_text.focus();
return false;
}
else
return true;
}