mediator
by Artem
HTML
<div id="results"></div>
<button id="home">Home</button>
<button id="guest">Guest</button>
JavaScript
'use strict';
/* Colleagues */
var Player = function(name) {
this.points = 0;
this.name = name;
};
Player.prototype.play = function() {
this.points += 1;
mediator.played();
};
/* ConcreteColleague */
var scoreboard = {
// element of HTML, which should be updated
element: document.getElementById('results'),
// updates the score on the screen
update: function(score) {
var i, msg = '';
for (i in score) {
if (score.hasOwnProperty(i)) {
msg += '<p><strong>' + i + '<\/strong>';
msg += ' ' + score[i];
msg += '<\/p>';
}
}
this.element.innerHTML = msg;
}
};
/* ConcreteMediator */
var mediator = {
// all players
players: {},
// initialization
setup: function() {
var players = this.players;
players.home = new Player('Home');
players.guest = new Player('Guest');
this.played();
},
// updates the score, if someone of the players made the move
played: function() {
var players = this.players,
score = {
Home: players.home.points,
Guest: players.guest.points
};
scoreboard.update(score);
},
// handler of user actions
keypress: function(e) {
e = e || window.event; // IE
if (e.which === 49) { // key "1"
mediator.players.home.play();
return;
}
if (e.which === 48) { // key "0"
mediator.players.guest.play();
return;
}
if (e.target.id === 'home') {
mediator.players.home.play();
return;
}
if (e.target.id === 'guest') {
mediator.players.guest.play();
return;
}
}
};
/* testing */
var Application = function() {
this.run = function() {
// Start!
mediator.setup();
window.onkeypress = mediator.keypress;
window.onclick = mediator.keypress;
// The game ends after 30 seconds
//setTimeout(function() {
// window.onkeypress = null;
// alert('Game over!');
//}, 30000);
};
};
var game = new Application();
game.run();