Type Tutor
<html><head><title>jsTypingTutor</title>
<!-- jsTypingTutor_lib.js -->
<script language="JavaScript">
/*
#-----------------------------------------------------------------------------
# Name: jsTypingTutor
# Purpose: To help build typing speed in users
# and in developers.
#
# Author: Jason Don Stracner
#
# Created: 2001/10/06
# RCS-ID: $Id: jsTypingTutor_lib.js $
# Copyright: (c) Little Rock Technology Consulting
# Licence: GPL
#-----------------------------------------------------------------------------
jsTypingTutor - Source Code Documentation
This file is the JavaScript code for jsTypingTutor. This
project is intended to help users develop faster typing
by simply re-typing text. The sample text files that are
included are mainly computer code. Computer code is thought
to make fuller use of the keyboard. It is a simple matter
to add your own text to the HTML file and have any text
displayed.
*/
var objTimer=null;
var rStartTime=0;
var rSecondsPassed_=0;
var rPauseStart_=0;
var iStrLen_=0;
var sStatMsg="";
/**
* Sets text in txtStats_ on the HTML page on a timed interval.
*
*
**/
function timer() {
var dtNow_ = new Date();
rSecondsPassed_ = dtNow_.getTime();
rSecondsPassed_ = rSecondsPassed_ / 1000;
rSecondsPassed_ = Math.round(rSecondsPassed_ - rStartTime);
iStrLen_ = document.frmTyping_.txtTop_.value.length;
iStrLen_ = iStrLen_ + document.frmTyping_.txtTypeHere_.value.length;
sStatMsg="Characters: " + iStrLen_;
sStatMsg += " Seconds Passed:" + rSecondsPassed_;
sStatMsg += " Word per minute:" + Math.round((iStrLen_ / rSecondsPassed_)/ (6 / 60));
document.frmTyping_.txtStats_.value=sStatMsg;
}
/**
* Called by button in HTML to start running the
* 'timer' function on a timed interval.
*
**/
function startTimer() {
rStartTime = parseInt((new Date).getTime()/1000);
rSecondsPassed_=0;
endTimer();
objTimer = setInterval("timer();",1000);
}
/**
* Called by button in HTML to pause the running
* of the 'timer' function on a timed interval.
*
**/
function pauseTimer() {
rPauseStart_ = parseInt((new Date).getTime()/1000);
if (objTimer != null) {
clearInterval(objTimer);
objTimer = null;
}
}
/**
* Called by button in HTML to resume the running
* of the 'timer' function on a timed interval.
*
**/
function resumeTimer() {
rStartTime=rStartTime+(parseInt((new Date).getTime()/1000)-rPauseStart_);
if (objTimer != null) {
clearInterval(objTimer);
objTimer = null;
}
objTimer = setInterval("timer();",1000);
}
/**
* Called by button in HTML to stop running the
* 'timer' function on a timed interval.
*
**/
function endTimer() {
rSecondsPassed_ = 0;
if (objTimer != null) {
clearInterval(objTimer);
objTimer = null;
}
}
/**
* Checks the content of the textbox 'txtTypeHere_'
* and eleminates any incorrect characters.
*
**/
function validateTyping(e) {
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
if (isNN) {
sChar = String.fromCharCode(e.which);
} else {
sChar = String.fromCharCode(event.keyCode);
}
var iTypedLength = document.frmTyping_.txtTypeHere_.value.length;
var sInitialValue = document.frmTyping_.txtBottom_.value.substring(0,iTypedLength);
var sTestChunk = document.frmTyping_.txtTypeHere_.value.substring(0,iTypedLength) + sChar;
var sCorrectChunk = document.frmTyping_.txtBottom_.value.substring(0,iTypedLength+1);
if (sTestChunk != sCorrectChunk) {
document.frmTyping_.txtTypeHere_.value=sInitialValue;
} else {
document.frmTyping_.txtTypeHere_.value=sCorrectChunk;
}
if (escape(document.frmTyping_.txtBottom_.value.charAt(iTypedLength))=="%0D") {
document.frmTyping_.txtTop_.value+= "\n" +
document.frmTyping_.txtBottom_.value.substring(0,iTypedLength);
document.frmTyping_.txtBottom_.value=
document.frmTyping_.txtBottom_.value.substring(iTypedLength+2,document.frmTyping_.txtBottom_.value.length);
document.frmTyping_.txtTypeHere_.value="";
}
//There should never be a return character at the end.
if (escape(document.frmTyping_.txtTypeHere_.value.charAt(iTypedLength-1))=="%0A") {
// Remove return character.
document.frmTyping_.txtTypeHere_.value=
document.frmTyping_.txtTypeHere_.value.substring(0,iTypedLength-2);
}
}
</script>
</head>
<body text="#0000ff">
<strong><center><font size="+2">jsTypingTutor</font></center></strong>
<hr align="center" size="2" width="25%">
<br>
<br>
<center>
<form name="frmTyping_"><b>T</b>yping statistics:<br>
<textarea name="txtStats_" rows="1" cols="80"></textarea><br>
<input onclick="startTimer()" value="Start" name="cmdStartTimer_" type="button">
<input onclick="pauseTimer()" value="Pause" name="cmdPauseTimer_" type="button">
<input onclick="resumeTimer()" value="Resume" name="cmdResumeTimer_" type="button">
<input onclick="endTimer()" value="Stop" name="cmdEndTimer_" type="button"><br>
<textarea name="txtTop_" rows="8" cols="80"></textarea><br>
<small><b>T</b>ype text into this area:</small><br>
<textarea name="txtTypeHere_" rows="1" cols="80" onkeypress="validateTyping(event);return false;"></textarea>
<textarea name="txtBottom_" rows="8" cols="80">Instructions:
Paste some text into this area then press the 'Start button'.
</textarea><br>
</form>
</center>
</body></html>
Related examples in the same category