Added flags and other things

This commit is contained in:
Chris Blanchard 2015-08-08 18:13:17 +01:00
parent bf7c19a928
commit b9123202c1
8 changed files with 357 additions and 44 deletions

View File

@ -23,20 +23,10 @@ var Map = require("./map");
var Server = require("./server"); var Server = require("./server");
var Gather = require("./gather"); var Gather = require("./gather");
var gather; var gather;
var previousGathers = [];
module.exports = function (namespace) { module.exports = function (namespace) {
gather = Gather({
onElectionTimeout: function () {
console.log("Election timeout")
refreshGather();
}
});
// ***** Generate Test Users *****
// var helper = require("./helper");
// helper.createTestUsers({ gather: gather });
var refreshGather = function () { var refreshGather = function () {
namespace.sockets.forEach(function (socket) { namespace.sockets.forEach(function (socket) {
socket.emit("gather:refresh", { socket.emit("gather:refresh", {
@ -48,13 +38,27 @@ module.exports = function (namespace) {
}); });
}; };
namespace.on("connection", function (socket) { var newGather = function () {
socket.on("gather:join", function (data) { if (gather) previousGathers.push(gather);
if (gather.can("addGatherer")) { gather = Gather({
gather.addGatherer(socket._user); onEvent: function () {
refreshGather(); refreshGather();
} }
}); });
}
newGather();
// ***** Generate Test Users *****
var helper = require("./helper");
helper.createTestUsers({ gather: gather });
namespace.on("connection", function (socket) {
socket.on("gather:join", function (data) {
if (gather.can("addGatherer")) gather.addGatherer(socket._user);
});
socket.on("gather:refresh", function () { socket.on("gather:refresh", function () {
socket.emit("gather:refresh", { socket.emit("gather:refresh", {
@ -64,10 +68,7 @@ module.exports = function (namespace) {
}); });
socket.on("gather:leave", function (data) { socket.on("gather:leave", function (data) {
if (gather.can("removeGatherer")) { if (gather.can("removeGatherer")) gather.removeGatherer(socket._user);
gather.removeGatherer(socket._user);
refreshGather();
}
}); });
socket.on("gather:select", function (data) { socket.on("gather:select", function (data) {

View File

@ -19,8 +19,10 @@ function Gather (options) {
return new Gather(options); return new Gather(options);
} }
if (options && typeof options.onElectionTimeout === 'function') { if (options && typeof options.onEvent === 'function') {
this.onElectionTimeout = options.onElectionTimeout; this.onEvent = options.onEvent;
} else {
this.onEvent = function () {}; // Noop
} }
this.TEAM_SIZE = 6; this.TEAM_SIZE = 6;
@ -214,6 +216,14 @@ StateMachine.create({
{ name: "removeGatherer", from: ["gathering", "election", "selection"], to: "gathering" } { name: "removeGatherer", from: ["gathering", "election", "selection"], to: "gathering" }
], ],
callbacks: { callbacks: {
// Callbacks for events
oninitState: function () { this.onEvent.call(this) },
onaddGatherer: function () { this.onEvent.call(this) },
onselectLeader: function () { this.onEvent.call(this) },
onelectionTimeout: function () { this.onEvent.call(this) },
onconfirmSelection: function () { this.onEvent.call(this) },
onremoveGatherer: function () { this.onEvent.call(this) },
// Gathering State // Gathering State
onbeforeaddGatherer: function (event, from, to, user) { onbeforeaddGatherer: function (event, from, to, user) {
this.addUser(user); this.addUser(user);
@ -238,9 +248,6 @@ StateMachine.create({
if (self.can("electionTimeout")) { if (self.can("electionTimeout")) {
self.electionTimeout(); self.electionTimeout();
} }
if (self.onElectionTimeout) {
self.onElectionTimeout.bind(self)();
}
}, self.ELECTION_INTERVAL); }, self.ELECTION_INTERVAL);
}, },
@ -282,6 +289,7 @@ StateMachine.create({
&& this.marines().length === this.TEAM_SIZE); && this.marines().length === this.TEAM_SIZE);
}, },
// Remove gatherer event
onbeforeremoveGatherer: function (event, from, to, user) { onbeforeremoveGatherer: function (event, from, to, user) {
this.removeUser(user); this.removeUser(user);
} }

View File

@ -51,6 +51,13 @@ var SelectPlayerButton = React.createClass({
return (<button return (<button
className="btn btn-xs btn-default" className="btn btn-xs btn-default"
data-disabled="true">Leader</button>); data-disabled="true">Leader</button>);
} else if (this.props.gatherer.team !== "lobby") {
return (<button
onClick={this.selectPlayer}
value={this.props.gatherer.id}
className="btn btn-xs btn-default"> Reselect
</button>
);
} else { } else {
return (<button return (<button
onClick={this.selectPlayer} onClick={this.selectPlayer}
@ -505,8 +512,15 @@ var Gatherers = React.createClass({
render: function () { render: function () {
var self = this; var self = this;
var gatherers = this.props.gather.gatherers.map(function (gatherer) { var gatherers = this.props.gather.gatherers.map(function (gatherer) {
// Switch this to online status
var online= (<div className="dot online"></div>); // Country
var country;
if (gatherer.user.country) {
country = (<img src="images/blank.gif"
className={"flag flag-" + gatherer.user.country.toLowerCase()}
alt={gatherer.user.country} />);
};
var division = (<span className="label label-primary">{gatherer.user.ability.division}</span>); var division = (<span className="label label-primary">{gatherer.user.ability.division}</span>);
var lifeform = ( var lifeform = (
@ -537,18 +551,26 @@ var Gatherers = React.createClass({
} }
if (self.props.gather.state === 'selection') { if (self.props.gather.state === 'selection') {
if (self.props.currentGatherer && self.props.currentGatherer.leader) {
action = ( action = (
<span> <span>
<SelectPlayerButton gatherer={gatherer} /> <SelectPlayerButton gatherer={gatherer} />
</span> </span>
); );
} else {
if (gatherer.team !== "lobby") {
action = (<span className="label label-success">{gatherer.team}</span>);
}
}
} }
return ( return (
<tr key={gatherer.user.id}> <tr key={gatherer.user.id}>
<td className="col-md-3">{online} {gatherer.user.username}</td> <td className="col-md-5">{country} {gatherer.user.username}&nbsp;</td>
<td className="col-md-6">{lifeform} {division} {team}</td> <td className="col-md-5">
<td className="col-md-3 text-right">{action}&nbsp;</td> {lifeform} {division} {team}&nbsp;
</td>
<td className="col-md-2 text-right">{action}&nbsp;</td>
</tr> </tr>
); );
}) })

259
public/css/flags.css Normal file
View File

@ -0,0 +1,259 @@
.flag {
width: 16px;
height: 11px;
background:url(/images/flags.png) no-repeat
}
.flag.flag-ad {background-position: -16px 0}
.flag.flag-ae {background-position: -32px 0}
.flag.flag-af {background-position: -48px 0}
.flag.flag-ag {background-position: -64px 0}
.flag.flag-ai {background-position: -80px 0}
.flag.flag-al {background-position: -96px 0}
.flag.flag-am {background-position: -112px 0}
.flag.flag-an {background-position: -128px 0}
.flag.flag-ao {background-position: -144px 0}
.flag.flag-ar {background-position: -160px 0}
.flag.flag-as {background-position: -176px 0}
.flag.flag-at {background-position: -192px 0}
.flag.flag-au {background-position: -208px 0}
.flag.flag-aw {background-position: -224px 0}
.flag.flag-az {background-position: -240px 0}
.flag.flag-ba {background-position: 0 -11px}
.flag.flag-bb {background-position: -16px -11px}
.flag.flag-bd {background-position: -32px -11px}
.flag.flag-be {background-position: -48px -11px}
.flag.flag-bf {background-position: -64px -11px}
.flag.flag-bg {background-position: -80px -11px}
.flag.flag-bh {background-position: -96px -11px}
.flag.flag-bi {background-position: -112px -11px}
.flag.flag-bj {background-position: -128px -11px}
.flag.flag-bm {background-position: -144px -11px}
.flag.flag-bn {background-position: -160px -11px}
.flag.flag-bo {background-position: -176px -11px}
.flag.flag-br {background-position: -192px -11px}
.flag.flag-bs {background-position: -208px -11px}
.flag.flag-bt {background-position: -224px -11px}
.flag.flag-bv {background-position: -240px -11px}
.flag.flag-bw {background-position: 0 -22px}
.flag.flag-by {background-position: -16px -22px}
.flag.flag-bz {background-position: -32px -22px}
.flag.flag-ca {background-position: -48px -22px}
.flag.flag-catalonia {background-position: -64px -22px}
.flag.flag-cd {background-position: -80px -22px}
.flag.flag-cf {background-position: -96px -22px}
.flag.flag-cg {background-position: -112px -22px}
.flag.flag-ch {background-position: -128px -22px}
.flag.flag-ci {background-position: -144px -22px}
.flag.flag-ck {background-position: -160px -22px}
.flag.flag-cl {background-position: -176px -22px}
.flag.flag-cm {background-position: -192px -22px}
.flag.flag-cn {background-position: -208px -22px}
.flag.flag-co {background-position: -224px -22px}
.flag.flag-cr {background-position: -240px -22px}
.flag.flag-cu {background-position: 0 -33px}
.flag.flag-cv {background-position: -16px -33px}
.flag.flag-cw {background-position: -32px -33px}
.flag.flag-cy {background-position: -48px -33px}
.flag.flag-cz {background-position: -64px -33px}
.flag.flag-de {background-position: -80px -33px}
.flag.flag-dj {background-position: -96px -33px}
.flag.flag-dk {background-position: -112px -33px}
.flag.flag-dm {background-position: -128px -33px}
.flag.flag-do {background-position: -144px -33px}
.flag.flag-dz {background-position: -160px -33px}
.flag.flag-ec {background-position: -176px -33px}
.flag.flag-ee {background-position: -192px -33px}
.flag.flag-eg {background-position: -208px -33px}
.flag.flag-eh {background-position: -224px -33px}
.flag.flag-england {background-position: -240px -33px}
.flag.flag-er {background-position: 0 -44px}
.flag.flag-es {background-position: -16px -44px}
.flag.flag-et {background-position: -32px -44px}
.flag.flag-eu {background-position: -48px -44px}
.flag.flag-fi {background-position: -64px -44px}
.flag.flag-fj {background-position: -80px -44px}
.flag.flag-fk {background-position: -96px -44px}
.flag.flag-fm {background-position: -112px -44px}
.flag.flag-fo {background-position: -128px -44px}
.flag.flag-fr {background-position: -144px -44px}
.flag.flag-ga {background-position: -160px -44px}
.flag.flag-gb {background-position: -176px -44px}
.flag.flag-gd {background-position: -192px -44px}
.flag.flag-ge {background-position: -208px -44px}
.flag.flag-gf {background-position: -224px -44px}
.flag.flag-gg {background-position: -240px -44px}
.flag.flag-gh {background-position: 0 -55px}
.flag.flag-gi {background-position: -16px -55px}
.flag.flag-gl {background-position: -32px -55px}
.flag.flag-gm {background-position: -48px -55px}
.flag.flag-gn {background-position: -64px -55px}
.flag.flag-gp {background-position: -80px -55px}
.flag.flag-gq {background-position: -96px -55px}
.flag.flag-gr {background-position: -112px -55px}
.flag.flag-gs {background-position: -128px -55px}
.flag.flag-gt {background-position: -144px -55px}
.flag.flag-gu {background-position: -160px -55px}
.flag.flag-gw {background-position: -176px -55px}
.flag.flag-gy {background-position: -192px -55px}
.flag.flag-hk {background-position: -208px -55px}
.flag.flag-hm {background-position: -224px -55px}
.flag.flag-hn {background-position: -240px -55px}
.flag.flag-hr {background-position: 0 -66px}
.flag.flag-ht {background-position: -16px -66px}
.flag.flag-hu {background-position: -32px -66px}
.flag.flag-ic {background-position: -48px -66px}
.flag.flag-id {background-position: -64px -66px}
.flag.flag-ie {background-position: -80px -66px}
.flag.flag-il {background-position: -96px -66px}
.flag.flag-im {background-position: -112px -66px}
.flag.flag-in {background-position: -128px -66px}
.flag.flag-io {background-position: -144px -66px}
.flag.flag-iq {background-position: -160px -66px}
.flag.flag-ir {background-position: -176px -66px}
.flag.flag-is {background-position: -192px -66px}
.flag.flag-it {background-position: -208px -66px}
.flag.flag-je {background-position: -224px -66px}
.flag.flag-jm {background-position: -240px -66px}
.flag.flag-jo {background-position: 0 -77px}
.flag.flag-jp {background-position: -16px -77px}
.flag.flag-ke {background-position: -32px -77px}
.flag.flag-kg {background-position: -48px -77px}
.flag.flag-kh {background-position: -64px -77px}
.flag.flag-ki {background-position: -80px -77px}
.flag.flag-km {background-position: -96px -77px}
.flag.flag-kn {background-position: -112px -77px}
.flag.flag-kp {background-position: -128px -77px}
.flag.flag-kr {background-position: -144px -77px}
.flag.flag-kurdistan {background-position: -160px -77px}
.flag.flag-kw {background-position: -176px -77px}
.flag.flag-ky {background-position: -192px -77px}
.flag.flag-kz {background-position: -208px -77px}
.flag.flag-la {background-position: -224px -77px}
.flag.flag-lb {background-position: -240px -77px}
.flag.flag-lc {background-position: 0 -88px}
.flag.flag-li {background-position: -16px -88px}
.flag.flag-lk {background-position: -32px -88px}
.flag.flag-lr {background-position: -48px -88px}
.flag.flag-ls {background-position: -64px -88px}
.flag.flag-lt {background-position: -80px -88px}
.flag.flag-lu {background-position: -96px -88px}
.flag.flag-lv {background-position: -112px -88px}
.flag.flag-ly {background-position: -128px -88px}
.flag.flag-ma {background-position: -144px -88px}
.flag.flag-mc {background-position: -160px -88px}
.flag.flag-md {background-position: -176px -88px}
.flag.flag-me {background-position: -192px -88px}
.flag.flag-mg {background-position: -208px -88px}
.flag.flag-mh {background-position: -224px -88px}
.flag.flag-mk {background-position: -240px -88px}
.flag.flag-ml {background-position: 0 -99px}
.flag.flag-mm {background-position: -16px -99px}
.flag.flag-mn {background-position: -32px -99px}
.flag.flag-mo {background-position: -48px -99px}
.flag.flag-mp {background-position: -64px -99px}
.flag.flag-mq {background-position: -80px -99px}
.flag.flag-mr {background-position: -96px -99px}
.flag.flag-ms {background-position: -112px -99px}
.flag.flag-mt {background-position: -128px -99px}
.flag.flag-mu {background-position: -144px -99px}
.flag.flag-mv {background-position: -160px -99px}
.flag.flag-mw {background-position: -176px -99px}
.flag.flag-mx {background-position: -192px -99px}
.flag.flag-my {background-position: -208px -99px}
.flag.flag-mz {background-position: -224px -99px}
.flag.flag-na {background-position: -240px -99px}
.flag.flag-nc {background-position: 0 -110px}
.flag.flag-ne {background-position: -16px -110px}
.flag.flag-nf {background-position: -32px -110px}
.flag.flag-ng {background-position: -48px -110px}
.flag.flag-ni {background-position: -64px -110px}
.flag.flag-nl {background-position: -80px -110px}
.flag.flag-no {background-position: -96px -110px}
.flag.flag-np {background-position: -112px -110px}
.flag.flag-nr {background-position: -128px -110px}
.flag.flag-nu {background-position: -144px -110px}
.flag.flag-nz {background-position: -160px -110px}
.flag.flag-om {background-position: -176px -110px}
.flag.flag-pa {background-position: -192px -110px}
.flag.flag-pe {background-position: -208px -110px}
.flag.flag-pf {background-position: -224px -110px}
.flag.flag-pg {background-position: -240px -110px}
.flag.flag-ph {background-position: 0 -121px}
.flag.flag-pk {background-position: -16px -121px}
.flag.flag-pl {background-position: -32px -121px}
.flag.flag-pm {background-position: -48px -121px}
.flag.flag-pn {background-position: -64px -121px}
.flag.flag-pr {background-position: -80px -121px}
.flag.flag-ps {background-position: -96px -121px}
.flag.flag-pt {background-position: -112px -121px}
.flag.flag-pw {background-position: -128px -121px}
.flag.flag-py {background-position: -144px -121px}
.flag.flag-qa {background-position: -160px -121px}
.flag.flag-re {background-position: -176px -121px}
.flag.flag-ro {background-position: -192px -121px}
.flag.flag-rs {background-position: -208px -121px}
.flag.flag-ru {background-position: -224px -121px}
.flag.flag-rw {background-position: -240px -121px}
.flag.flag-sa {background-position: 0 -132px}
.flag.flag-sb {background-position: -16px -132px}
.flag.flag-sc {background-position: -32px -132px}
.flag.flag-scotland {background-position: -48px -132px}
.flag.flag-sd {background-position: -64px -132px}
.flag.flag-se {background-position: -80px -132px}
.flag.flag-sg {background-position: -96px -132px}
.flag.flag-sh {background-position: -112px -132px}
.flag.flag-si {background-position: -128px -132px}
.flag.flag-sk {background-position: -144px -132px}
.flag.flag-sl {background-position: -160px -132px}
.flag.flag-sm {background-position: -176px -132px}
.flag.flag-sn {background-position: -192px -132px}
.flag.flag-so {background-position: -208px -132px}
.flag.flag-somaliland {background-position: -224px -132px}
.flag.flag-sr {background-position: -240px -132px}
.flag.flag-ss {background-position: 0 -143px}
.flag.flag-st {background-position: -16px -143px}
.flag.flag-sv {background-position: -32px -143px}
.flag.flag-sx {background-position: -48px -143px}
.flag.flag-sy {background-position: -64px -143px}
.flag.flag-sz {background-position: -80px -143px}
.flag.flag-tc {background-position: -96px -143px}
.flag.flag-td {background-position: -112px -143px}
.flag.flag-tf {background-position: -128px -143px}
.flag.flag-tg {background-position: -144px -143px}
.flag.flag-th {background-position: -160px -143px}
.flag.flag-tibet {background-position: -176px -143px}
.flag.flag-tj {background-position: -192px -143px}
.flag.flag-tk {background-position: -208px -143px}
.flag.flag-tl {background-position: -224px -143px}
.flag.flag-tm {background-position: -240px -143px}
.flag.flag-tn {background-position: 0 -154px}
.flag.flag-to {background-position: -16px -154px}
.flag.flag-tr {background-position: -32px -154px}
.flag.flag-tt {background-position: -48px -154px}
.flag.flag-tv {background-position: -64px -154px}
.flag.flag-tw {background-position: -80px -154px}
.flag.flag-tz {background-position: -96px -154px}
.flag.flag-ua {background-position: -112px -154px}
.flag.flag-ug {background-position: -128px -154px}
.flag.flag-um {background-position: -144px -154px}
.flag.flag-us {background-position: -160px -154px}
.flag.flag-uy {background-position: -176px -154px}
.flag.flag-uz {background-position: -192px -154px}
.flag.flag-va {background-position: -208px -154px}
.flag.flag-vc {background-position: -224px -154px}
.flag.flag-ve {background-position: -240px -154px}
.flag.flag-vg {background-position: 0 -165px}
.flag.flag-vi {background-position: -16px -165px}
.flag.flag-vn {background-position: -32px -165px}
.flag.flag-vu {background-position: -48px -165px}
.flag.flag-wales {background-position: -64px -165px}
.flag.flag-wf {background-position: -80px -165px}
.flag.flag-ws {background-position: -96px -165px}
.flag.flag-xk {background-position: -112px -165px}
.flag.flag-ye {background-position: -128px -165px}
.flag.flag-yt {background-position: -144px -165px}
.flag.flag-za {background-position: -160px -165px}
.flag.flag-zanzibar {background-position: -176px -165px}
.flag.flag-zm {background-position: -192px -165px}
.flag.flag-zw {background-position: -208px -165px}

BIN
public/images/blank.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

BIN
public/images/flags.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -51,6 +51,13 @@ var SelectPlayerButton = React.createClass({displayName: "SelectPlayerButton",
return (React.createElement("button", { return (React.createElement("button", {
className: "btn btn-xs btn-default", className: "btn btn-xs btn-default",
"data-disabled": "true"}, "Leader")); "data-disabled": "true"}, "Leader"));
} else if (this.props.gatherer.team !== "lobby") {
return (React.createElement("button", {
onClick: this.selectPlayer,
value: this.props.gatherer.id,
className: "btn btn-xs btn-default"}, " Reselect"
)
);
} else { } else {
return (React.createElement("button", { return (React.createElement("button", {
onClick: this.selectPlayer, onClick: this.selectPlayer,
@ -505,8 +512,15 @@ var Gatherers = React.createClass({displayName: "Gatherers",
render: function () { render: function () {
var self = this; var self = this;
var gatherers = this.props.gather.gatherers.map(function (gatherer) { var gatherers = this.props.gather.gatherers.map(function (gatherer) {
// Switch this to online status
var online= (React.createElement("div", {className: "dot online"})); // Country
var country;
if (gatherer.user.country) {
country = (React.createElement("img", {src: "images/blank.gif",
className: "flag flag-" + gatherer.user.country.toLowerCase(),
alt: gatherer.user.country}));
};
var division = (React.createElement("span", {className: "label label-primary"}, gatherer.user.ability.division)); var division = (React.createElement("span", {className: "label label-primary"}, gatherer.user.ability.division));
var lifeform = ( var lifeform = (
@ -537,18 +551,26 @@ var Gatherers = React.createClass({displayName: "Gatherers",
} }
if (self.props.gather.state === 'selection') { if (self.props.gather.state === 'selection') {
if (self.props.currentGatherer && self.props.currentGatherer.leader) {
action = ( action = (
React.createElement("span", null, React.createElement("span", null,
React.createElement(SelectPlayerButton, {gatherer: gatherer}) React.createElement(SelectPlayerButton, {gatherer: gatherer})
) )
); );
} else {
if (gatherer.team !== "lobby") {
action = (React.createElement("span", {className: "label label-success"}, gatherer.team));
}
}
} }
return ( return (
React.createElement("tr", {key: gatherer.user.id}, React.createElement("tr", {key: gatherer.user.id},
React.createElement("td", {className: "col-md-3"}, online, " ", gatherer.user.username), React.createElement("td", {className: "col-md-5"}, country, " ", gatherer.user.username, " "),
React.createElement("td", {className: "col-md-6"}, lifeform, " ", division, " ", team), React.createElement("td", {className: "col-md-5"},
React.createElement("td", {className: "col-md-3 text-right"}, action, " ") lifeform, " ", division, " ", team, " "
),
React.createElement("td", {className: "col-md-2 text-right"}, action, " ")
) )
); );
}) })

View File

@ -10,6 +10,7 @@
<link rel="stylesheet" href="/css/theme.css"> <link rel="stylesheet" href="/css/theme.css">
<link rel="stylesheet" href="/css/timeline.css"> <link rel="stylesheet" href="/css/timeline.css">
<link rel="stylesheet" href="/css/app.css"> <link rel="stylesheet" href="/css/app.css">
<link rel="stylesheet" href="/css/flags.css">
<script src="/js/jquery.min.js"></script> <script src="/js/jquery.min.js"></script>
<script src="/js/timeago.jquery.js"></script> <script src="/js/timeago.jquery.js"></script>