use H5P-Timer
parent
634a85f980
commit
996b5e31f3
12
library.json
12
library.json
|
@ -20,14 +20,18 @@
|
||||||
{
|
{
|
||||||
"path": "card.js"
|
"path": "card.js"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"path": "timer.js"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "counter.js"
|
"path": "counter.js"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "popup.js"
|
"path": "popup.js"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"preloadedDependencies": [
|
||||||
|
{
|
||||||
|
"machineName": "H5P.Timer",
|
||||||
|
"majorVersion": 0,
|
||||||
|
"minorVersion": 2
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,23 @@ H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||||
var cards = [];
|
var cards = [];
|
||||||
var removed = 0;
|
var removed = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the time on the screen
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {H5P.jQuery} $container - element to be updated
|
||||||
|
* @param {H5P.Timer} timer - the timer containing the time
|
||||||
|
*/
|
||||||
|
var updateDisplayTime = function($container, timer) {
|
||||||
|
var time = timer.getTime();
|
||||||
|
var minutes = H5P.Timer.extractTimeElement(time, 'minutes');
|
||||||
|
var seconds = H5P.Timer.extractTimeElement(time, 'seconds');
|
||||||
|
if (seconds < 10) {
|
||||||
|
seconds = '0' + seconds;
|
||||||
|
}
|
||||||
|
$container.text(minutes + ':' + seconds);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if these two cards belongs together.
|
* Check if these two cards belongs together.
|
||||||
*
|
*
|
||||||
|
@ -42,7 +59,7 @@ H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||||
|
|
||||||
if (desc !== undefined) {
|
if (desc !== undefined) {
|
||||||
// Pause timer and show desciption.
|
// Pause timer and show desciption.
|
||||||
timer.stop();
|
timer.pause();
|
||||||
popup.show(desc, card.getImage(), function () {
|
popup.show(desc, card.getImage(), function () {
|
||||||
if (finished) {
|
if (finished) {
|
||||||
// Game has finished
|
// Game has finished
|
||||||
|
@ -50,7 +67,7 @@ H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Popup is closed, continue.
|
// Popup is closed, continue.
|
||||||
timer.start();
|
timer.play();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -78,7 +95,7 @@ H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||||
card.on('flip', function () {
|
card.on('flip', function () {
|
||||||
self.triggerXAPI('interacted');
|
self.triggerXAPI('interacted');
|
||||||
// Keep track of time spent
|
// Keep track of time spent
|
||||||
timer.start();
|
timer.play();
|
||||||
|
|
||||||
if (flipped !== undefined) {
|
if (flipped !== undefined) {
|
||||||
var matie = flipped;
|
var matie = flipped;
|
||||||
|
@ -142,7 +159,8 @@ H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||||
'<dd class="h5p-card-turns">0</dd>' +
|
'<dd class="h5p-card-turns">0</dd>' +
|
||||||
'</dl>').appendTo($container);
|
'</dl>').appendTo($container);
|
||||||
|
|
||||||
timer = new MemoryGame.Timer($status.find('.h5p-time-spent'));
|
timer = new H5P.Timer(100);
|
||||||
|
timer.notifyEvery(H5P.Timer.TYPE_CLOCK, 0, 1000, updateDisplayTime, [$status.find('.h5p-time-spent'), timer]);
|
||||||
counter = new MemoryGame.Counter($status.find('.h5p-card-turns'));
|
counter = new MemoryGame.Counter($status.find('.h5p-card-turns'));
|
||||||
popup = new MemoryGame.Popup($container);
|
popup = new MemoryGame.Popup($container);
|
||||||
|
|
||||||
|
|
94
timer.js
94
timer.js
|
@ -1,94 +0,0 @@
|
||||||
(function (MemoryGame) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keeps track of the time spent.
|
|
||||||
*
|
|
||||||
* @class H5P.MemoryGame.Timer
|
|
||||||
* @param {H5P.jQuery} $container
|
|
||||||
*/
|
|
||||||
MemoryGame.Timer = function ($container) {
|
|
||||||
var self = this;
|
|
||||||
var interval, started, totalTime = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make timer more readable for humans.
|
|
||||||
* @private
|
|
||||||
* @param {Number} seconds
|
|
||||||
* @returns {String}
|
|
||||||
*/
|
|
||||||
var humanizeTime = function (seconds) {
|
|
||||||
var minutes = Math.floor(seconds / 60);
|
|
||||||
var hours = Math.floor(minutes / 60);
|
|
||||||
|
|
||||||
minutes = minutes % 60;
|
|
||||||
seconds = Math.floor(seconds % 60);
|
|
||||||
|
|
||||||
var time = '';
|
|
||||||
|
|
||||||
if (hours !== 0) {
|
|
||||||
time += hours + ':';
|
|
||||||
|
|
||||||
if (minutes < 10) {
|
|
||||||
time += '0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
time += minutes + ':';
|
|
||||||
|
|
||||||
if (seconds < 10) {
|
|
||||||
time += '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
time += seconds;
|
|
||||||
|
|
||||||
return time;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the timer element.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @param {boolean} last
|
|
||||||
* @returns {number}
|
|
||||||
*/
|
|
||||||
var update = function (last) {
|
|
||||||
var currentTime = (new Date().getTime() - started);
|
|
||||||
$container.text(humanizeTime(Math.floor((totalTime + currentTime) / 1000)));
|
|
||||||
|
|
||||||
if (last === true) {
|
|
||||||
// This is the last update, stop timing interval.
|
|
||||||
clearTimeout(interval);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Use setTimeout since setInterval isn't safe.
|
|
||||||
interval = setTimeout(function () {
|
|
||||||
update();
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentTime;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts the counter.
|
|
||||||
*/
|
|
||||||
self.start = function () {
|
|
||||||
if (started === undefined) {
|
|
||||||
started = new Date();
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stops the counter.
|
|
||||||
*/
|
|
||||||
self.stop = function () {
|
|
||||||
if (started !== undefined) {
|
|
||||||
totalTime += update(true);
|
|
||||||
started = undefined;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
})(H5P.MemoryGame);
|
|
Loading…
Reference in New Issue