You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
5.6 KiB
JavaScript

dojo.require("dojo.parser");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.analytics.Urchin")
dojo.require("demos.flashCards.src.MathFlashCard");
dojo.require("demos.flashCards.src.Teacher");
//global storage point for our fade animations
var messageFadeEvent = null;
//reset the score board
var resetScore = function(){
var card = dijit.byId("card");
dojo.byId("remainingTd").innerHTML = card.numberProblems;
dojo.byId("correctTd").innerHTML = 0;
dojo.byId("incorrectTd").innerHTML = 0;
dojo.byId("tooSlowTd").innerHTML = 0;
dojo.style("scoreTable", "display", "");
};
var goodAnswers = ["Great job. Did you know that doing math regularly keeps you sharp?", "Hey, this is correct, did you ever concider joining a math competition?", "I am impressed! Not so many students are good in math, congratulations!"];
var indexGood = 0;
var countGood = 0;
var badAnswers = ["Hmm, you are letting me down! Did you practice enough?", "This is wrong, why don't you know such a simple answer?", "I might have to send you back to school, this is not good"];
var indexBad = 0;
var slowAnswers = ["Hmm, I thought you could have beena little faster to be honest", "You could have counted the result on your fingers my friend.", "Slow slow slow, what are we going to do about this?"];
var indexSlow = 0;
var countBad = 0;
//start the flashcards, result of pressing "getStarted"
var getStarted = function(){
dijit.byId("teacher").speak("Hi student! Let's go. Just enter the correct results and press enter.");
//call the card widgets getStarted() method
var c = dijit.byId("card");
c.getStarted();
//display(unhide) the card
dojo.style(c.domNode,"display","");
//hide the getStarted Button
dojo.style("start", "display", "none");
//reset the score board
resetScore();
//attach to the onCorrect event of the card. When this event happens
//we want to display a fading message and update the score board
dojo.connect(c, "onCorrect", function(e){
if (messageFadeEvent){
messageFadeEvent.stop();
}
countGood++;
countBad = 0;
if (countGood == 2){
dijit.byId("teacher").frown(false);
}
dojo.byId("correctTd").innerHTML = c.correctAnswers;
if (c.started){
dojo.byId("remainingTd").innerHTML = c.numberProblems - c.currentProblem;
// FIXME: which node?
dojo.removeClass("incorrect");
dojo.addClass("correct");
dijit.byId("teacher").speak(goodAnswers[indexGood], 5000);
indexGood++;
if (indexGood == goodAnswers.length) { indexGood=0; }
}
});
//attach to the onIncorrect event of the card. When this event happens
//we want to display a fading message and update the score board
dojo.connect(c, "onIncorrect", function(e){
if(messageFadeEvent){
messageFadeEvent.stop();
}
countBad++;
countGood = 0;
if (countBad == 2){
dijit.byId("teacher").frown(true);
}
dojo.byId("incorrectTd").innerHTML = c.incorrectAnswers;
if(c.started){
dojo.byId("remainingTd").innerHTML = c.numberProblems - c.currentProblem;
dojo.addClass("incorrect");
dojo.removeClass("correct");
dijit.byId("teacher").speak(badAnswers[indexBad], 5000);
indexBad++;
if (indexBad == badAnswers.length) { indexBad=0; }
}
});
//attach to the onTooSlow event of the card. When this event happens
//we want to display a fading message and update the score board
dojo.connect(c, "onTooSlow", function(e){
if(messageFadeEvent){
messageFadeEvent.stop();
}
countBad++;
countGood = 0;
if (countBad == 2){
dijit.byId("teacher").frown(true);
}
dojo.byId("tooSlowTd").innerHTML = c.tooSlow;
if(c.started){
dojo.byId("remainingTd").innerHTML = c.numberProblems - c.currentProblem;
// FIXME: which node?
dojo.addClass("incorrect");
dojo.removeClass("correct");
dijit.byId("teacher").speak(slowAnswers[indexSlow], 5000);
indexSlow++;
if (indexSlow == slowAnswers.length) { indexSlow=0; }
}
});
//attach to the onEnd event of the card. When this event happens
//we want to display a final message,update the score board, and show
//the restart button
dojo.connect(c, "onEnd", function(correct, total, slow){
if (messageFadeEvent){
messageFadeEvent.stop();
}
//create ending message/summary
var msg = "You got " + correct + " out of " + total + " correct.";
if(slow > 0){
msg += " You were too slow on ";
if(slow == 1){
msg += "1 problem.";
} else {
msg += slow + " problems.";
}
}
if (c.correctAnswers > 8){
dijit.byId("teacher").frown(false);
}
dijit.byId("teacher").speak(msg);
dojo.style(c.domNode, "display", "none");
dojo.style(dojo.byId("restart"), "display", "");
dojo.byId("remainingTd").innerHTML = "0";
});
//attach to the restart method of the card. We dont' want to reset the
//score onEnd since people want a chance to review their score, this won't
//happen until they actually click restart
dojo.connect(c, "restart", resetScore);
};
//the restart function
var restart = function(){
dojo.style(dojo.byId("restart"),"display","none");
dojo.style(dijit.byId("card").domNode,"display","");
dijit.byId("teacher").speak("What a delightful student you are, keep practicing! Your way to success.");
dijit.byId("card").restart();
};
dojo.addOnLoad(function(){
dojo.parser.parse();
setInterval(function(){
dijit.byId("teacher").blink();
}, 2500);
// stall this just a little
setTimeout(function(){
new dojox.analytics.Urchin({
acct: "UA-3572741-1",
GAonLoad: function(){
this.trackPageView("/demos/flashCards");
}
});
}, 1500);
});