mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-19 17:59:32 -06:00
248 lines
6.1 KiB
JavaScript
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;
|
|
} |