Files
similarWords/app/js/index.js
2013-04-06 11:04:09 +02:00

176 lines
3.9 KiB
JavaScript

if (typeof(sw) == 'undefined') {
var sw = {};
sw.apiPrefix = '/';
}
(function($) {
//helper functions
var shuffle = function(obj) {
return obj.sort( function() { return 0.5 - Math.random(); } );
};
var getKey = function(obj) {
var word = [];
for(var k in obj) word.push(k);
return word[0];
};
var selectWordsForGame = function() {
//select a random word from the list
var words = sw.words[Math.round(Math.random() * sw.words.length)];
var word = getKey(words);
var similar = words[word];
//i really should include _
var filtered = [];
for(var i=0; i<similar.length; i++) {
if(similar[i] != word) {
filtered.push(similar[i]);
}
}
filtered = shuffle(filtered);
filtered = filtered.slice(0, 3);
filtered.push(word);
filtered = shuffle(filtered);
sw.currentWord = word;
return {word: word, similar: filtered};
};
var startGame = function() {
$("#main").empty().html('views/index.ejs', selectWordsForGame());
};
var gameOver = function() {
sw.gameover = true;
var result = 'Sehr gut!';
if (sw.wrongWords > 1 || sw.finaltime > 50) {
result = 'Du kannst das besser!';
};
if (sw.wrongWords > 1 || sw.finaltime > 60) {
result = 'geht so...';
};
if (sw.wrongWords > 1 && sw.finaltime < 40) {
result = 'Du bist sehr schnell, aber du hast Fehler gemacht';
};
$("#main").empty().html('views/gameover.ejs', {result: result, time: sw.finaltime, wrong: sw.wrongWords, correct: sw.correctWords});
};
var startNewGame = function() {
var playforwords = 10;
sw.correctWords = 0;
sw.wrongWords = 0;
sw.time = Math.round((new Date()).getTime() / 1000);
sw.gameover = false;
var updateBadges = function() {
$('.num-of-words-wrong').html(sw.wrongWords + (sw.wrongWords == 1 ? ' word' : ' words'));
$('.num-of-words').html(sw.correctWords + (sw.correctWords == 1 ? ' word' : ' words'));
$('.time-words').html(Math.round((new Date()).getTime() / 1000) - sw.time);
if(playforwords > sw.correctWords + sw.wrongWords) {
setTimeout(function() {
updateBadges();
}, 100);
} else {
sw.finaltime = Math.round((new Date()).getTime() / 1000) - sw.time;
sw.gameover = true;
}
};
updateBadges();
startGame();
};
//start app
var w = $.ajax({
url: sw.apiPrefix + "words.json",
dataType: 'json'
});
w.done(function(words) {
var start = $('.start');
start.removeClass('disabled');
start.html(' Start ');
start.animate({
opacity : 1
}, 1000, 'linear');
sw.words = words.words;
});
//events
$(document).on('click', '.start', function() {
startNewGame();
});
$(document).on('click', '.word-button', function(ev, el) {
el = $(ev.currentTarget);
if (el.hasClass('disabled')) {
return;
}
$('.word-button').addClass('disabled');
if(sw.currentWord == el.html()) {
sw.correctWords = sw.correctWords + 1;
el.addClass('btn-success');
} else {
sw.wrongWords = sw.wrongWords + 1;
el.addClass('btn-danger');
}
setTimeout(function() {
$('.word-button[data-word="' + sw.currentWord + '"]').addClass('btn-success');
if(sw.gameover) {
setTimeout(function() {
gameOver();
}, 1000);
} else {
setTimeout(function() {
startGame();
}, 1000);
}
}, 1000);
});
//globals
sw.words = [];
sw.correctWords = 0;
sw.wrongWords = 0;
sw.time = 0;
sw.finaltime = 0;
sw.gameover = false;
sw.currentWord;
})(jQuery);
//utils
(function() {
window.Utils = {};
Utils.ellipsis = function(text, maxLength){
if(typeof maxLength === 'undefined'){
maxLength = 9000; //a large number
}
if (text.length <= maxLength)
return text;
var xMaxFit = maxLength - 1;
var xTruncateAt = text.lastIndexOf(' ', xMaxFit);
if (xTruncateAt == -1 || xTruncateAt < maxLength / 2)
xTruncateAt = xMaxFit;
return text.substr(0, xTruncateAt) + "…";
};
})();