flask/script.js

254 lines
11 KiB
JavaScript
Raw Normal View History

2023-03-06 22:57:52 +05:30
var isfreshStart = true;
var wordCount = 0;
var qualityType = 0;
var timeCounterForSpeed = 0;
var speed = 0;
var userid = "";
var timeCounterForSpeed_pause = false;
var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = voices[10];
msg.voiceURI = "native";
msg.volume = 1;
msg.rate = 0.8;
msg.pitch = 0.8;
msg.lang = 'en-US';
// information about data
var wholeData = [];
var suggestions = ["Donot use caps lock while typing", "Use the correct positioning of fingers", "Focus on accuracy over speed", "Dont look at the keyboard or your hands", "Practice, Practice, Practice"];
var suggestion_count = 0;
var dataCount = 0;
var data = "";
var pointer_to_data = 1;
var firstPartData = "";
var secondPartData = "";
function startTimeCounter() {
const timeOut = setInterval(function(){
if (isfreshStart) {
clearTimeout(timeOut);
}
if (!timeCounterForSpeed_pause) {
timeCounterForSpeed += 1;
speed = parseInt(wordCount / (timeCounterForSpeed / 60.0));
document.getElementById("speed_info").textContent = speed;
qualityType = parseInt(speed/10) % 10;
switch (qualityType) {
case 0 :
case 1 :
case 2 :
case 3 : document.getElementById("speed_info").style.color = "red"; break;
case 4 : document.getElementById("speed_info").style.color = "#D2E101"; break;
default : document.getElementById("speed_info").style.color = "green"; break;
}
}
}, 1000);
}
function startSuggestion() {
const timeOut = setInterval(function(){
if (isfreshStart) {
clearTimeout(timeOut);
}
if (document.getElementById("start-button").innerText == "Pause") {
document.getElementById("suggestion").textContent = "( suggestion : " + suggestions[suggestion_count % suggestions.length] + " )";
suggestion_count += 1;
}
}, 3000);
}
function speak(message) {
msg.text = document.getElementById("main-text-second").textContent;
if (document.getElementById("listenAndtype_id").checked && (document.getElementById("start-button").innerText == "Pause")) {
speechSynthesis.speak(msg);
}
}
function start() {
if (isfreshStart) { // for the first start
secondPartData = data[pointer_to_data - 1] + " " + data[pointer_to_data] + " " + data[pointer_to_data + 1];
pointer_to_data = 1;
timeCounterForSpeed = 0;
wordCount = 0;
speed = 0;
timeCounterForSpeed_pause = false;
startTest();
startTimeCounter();
startSuggestion();
isfreshStart = false;
document.getElementById("main-text-second").textContent = firstPartData + secondPartData;
document.getElementById("start-button").innerText = "Pause";
document.getElementById("start-button").style.backgroundColor = "yellow";
document.getElementById("start-button").style.borderColor = "yellow";
document.getElementById("text-test").disabled = false;
} else if (document.getElementById("start-button").innerText == "Start") {
document.getElementById("main-text-second").textContent = firstPartData + secondPartData;
document.getElementById("start-button").innerText = "Pause";
document.getElementById("start-button").style.backgroundColor = "yellow";
document.getElementById("start-button").style.borderColor = "yellow";
document.getElementById("text-test").disabled = false;
startTest();
startTimeCounter();
startSuggestion();
} else { // when clicked on pause to pause test.
timeCounterForSpeed_pause = true;
document.getElementById("main-text-first").textContent = "";
document.getElementById("main-text-second").textContent = "Click on 'Start' to continue test";
document.getElementById("start-button").innerText = "Start";
document.getElementById("start-button").style.backgroundColor = "green";
document.getElementById("start-button").style.borderColor = "green";
document.getElementById("text-test").disabled = true;
}
}
function startTest() {
var timeCount = 0;
var shallEndTheGameAfterSingleWord = false;
const timeOut = setInterval(function(){
// resetting timeout when reset (stop) is done
if (isfreshStart) {
clearTimeout(timeOut);
}
// when test is started
if (document.getElementById("start-button").innerText == "Pause") {
let mainData = document.getElementById("main-text-first").textContent + document.getElementById("main-text-second").textContent;
let ansData = document.getElementById("text-test").value.trim();
let commonData = "";
let temp = 0;
for (; temp < ansData.length; temp++) {
if((document.getElementById("ignoreCase_id").checked && mainData[temp].toLowerCase() == ansData[temp].toLowerCase()) || ((!document.getElementById("ignoreCase_id").checked) && mainData[temp] == ansData[temp])) {
commonData += mainData[temp];
continue;
}
break;
}
if (commonData.trim().split(" ").length > 1) {
if (pointer_to_data + 2 != data.length) {
pointer_to_data += 1;
} else {
shallEndTheGameAfterSingleWord = true;
}
document.getElementById("main-text-first").textContent = commonData.trim().split(" ")[commonData.split(" ").length==0 ? 0 : commonData.split(" ").length-1];
let temp_data = data[pointer_to_data - 1] + " " + data[pointer_to_data] + " " + data[pointer_to_data + 1];
temp_data = temp_data.substring(document.getElementById("main-text-first").textContent.length, temp_data.length);//split(document.getElementById("main-text-first").textContent);
// if (true) {
// let temp_temp_data = "";
// for(let i = 1; i < temp_data.length ; i++)
// temp_temp_data += temp_data[i] + " ";
// temp_data = temp_temp_data.trim();
// }
document.getElementById("main-text-second").textContent = temp_data;
document.getElementById("main-text-first").style.color = "brown";
document.getElementById("text-test").value = commonData.split(" ")[commonData.split(" ").length-1];
firstPartData = document.getElementById("main-text-first").textContent + " ";
secondPartData = document.getElementById("main-text-second").textContent;
document.getElementById("text-test").value = firstPartData.trim();
wordCount += 1;
} else {
if ( commonData.length != 0) {
firstPartData = commonData;
secondPartData = (document.getElementById("main-text-first").textContent + document.getElementById("main-text-second").textContent).substring(temp, mainData.length);
document.getElementById("main-text-first").textContent = firstPartData;
document.getElementById("main-text-first").style.color = "brown";
document.getElementById("main-text-second").textContent = secondPartData;
// end game
if ( commonData.length == (firstPartData + secondPartData).trim().length) {
let message = qualityType < 4 ? "You need to improve your typing speed." : qualityType > 4 ? "Your typing speed is nice. Keep it up" : "Your typing speed is good. Practice more!";
alert("game ended! Your Typing speed is " + speed + " words/min.\n" + message);
let updateSpeed = speed;
stop();
window.location.href = './savescore.php?uid=' + userid + "&score=" + updateSpeed;
}
}
}
// delay in audio output in repeating
timeCount += 1;
if (timeCount % 25 == 0) {
speak();
timeCount = 1;
}
}
}, 100);
}
function stop() { // when stop is clicked, resetting everything
var updateSpeed_temp = speed;
var qualityType_temp = qualityType;
document.getElementById("main-text-first").textContent = "";
document.getElementById("main-text-second").textContent = "Click on 'START' to start test";
document.getElementById("start-button").innerText = "Start";
document.getElementById("start-button").style.backgroundColor = "green";
document.getElementById("start-button").style.borderColor = "green";
document.getElementById("text-test").value = "";
document.getElementById("text-test").disabled = true;
document.getElementById("suggestion").textContent = "";
pointer_to_data = 1;
timeCounterForSpeed_pause = true;
isfreshStart = true;
wordCount = 0;
qualityType = 0;
speed = 0;
dataCount += 1;
data = wholeData[dataCount % wholeData.length].split(" ");
tempData = [];
for (let i = 0 ; i < 22/*data.length*/ ; i++) {
if (data[i].trim().length != 0){
tempData.push(data[i]);
}
}
data = tempData;
timeCounterForSpeed = 0;
firstPartData = "";
secondPartData = data[pointer_to_data - 1] + " " + data[pointer_to_data] + " " + data[pointer_to_data + 1];
document.getElementById("speed_info").textContent = 0;
document.getElementById("speed_info").style.color = "black";
// end game
if ( updateSpeed_temp != 0) {
let message = qualityType_temp < 4 ? "You need to improve your typing speed." : qualityType_temp > 4 ? "Your typing speed is nice. Keep it up" : "Your typing speed is good. Practice more!";
alert("game ended! Your Typing speed is " + updateSpeed_temp + " words/min.\n" + message);
window.location.href = './savescore.php?uid=' + userid + "&score=" + updateSpeed_temp;
}
}
function showAlertForSubscribe() {
if (document.getElementById("subscribe").checked) {
// alert("Subscribed successfully to get latest-updates.")
window.location.href = './subscribe.php?uid=' + userid + '&subs=1';
} else {
// alert("Unsubscribed successfully!")
window.location.href = './subscribe.php?uid=' + userid + '&subs=0';
}
}
function loadBestSpeed() {
var usernames = ["Ujjwal Kumar", "Niyaz Ahmed Mir", "Bimal"];
var speeds = [10, 20, 30];
let temp_list = "";
for (let i = 0; i < usernames.length; i++) {
temp_list += "<tr><td>" + usernames[i] + "</td><td>:</td><td> " + speeds[i] + " words/min</td></tr>";
}
document.getElementById("user_info").innerHTML = temp_list;
}
function checkEmail() {
let email = document.getElementById("email").value;
if(!String(email).toLowerCase()
.match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)) {
document.getElementById("email").style.color = "red";
return false;
}
document.getElementById("email").style.color = "black";
return true;
}
function logout() {
window.location.replace('../index.html');
}