Large diffs are not rendered by default.

@@ -593,20 +593,49 @@ span.batch * {
min-height: 150px;
}

#game #dice {
#board-floats {
position: absolute;
top: 0;
left: 0;
height: 4em;
display: flex;
flex-flow: column;
align-items: center;
}
#game #dice :hover {
#dice :hover {
cursor: pointer;
}

#game #dice .die {
#dice {
display: block;
height: 4em;
}
#dice .die {
height: 100%;
margin: 0.1em;
}
#buttons {
margin: 0.2em 0 0;
}
#buttons div {
margin: 0.2em;
padding:0.2em 1em;
cursor: pointer;
border: 4px solid #000;
background-color: #bbb;
border-radius: 10px;
text-align: center;
display: none;
width: 100%
}
#buttons #exitGame {
color: #fff;
background-color: #222;
display: block;
}

#public-trade-buttons button {
display: none;
}

.play #game-data {
@@ -637,6 +666,12 @@ div#private-data {
font-weight: bold;
}

.clickable polygon {
stroke-width: 0;
}
.clickable :hover {
cursor: pointer;
}
/*.play .spot:hover, .play .road:hover {
stroke: #000;
}*/
@@ -645,7 +680,13 @@ div#private-data {
.play .red {
color: #f00;
}
.play .spot.red, .play .road.red {
.clickable.red polygon {
fill: #f00;
}
.clickable.red path {
stroke: #f00;
}
/*.play .spot.red, .play .road.red {
stroke: #f00;
fill: #f00;
}
@@ -654,12 +695,18 @@ div#private-data {
}
.play .spot.red.city {
stroke-width: 0.5;
}
}*/

.play .orange {
color: #ffa500;
}
.play .spot.orange, .play .road.orange {
.clickable.orange polygon {
fill: #ffa500;
}
.clickable.orange path {
stroke: #ffa500;
}
/*.play .spot.orange, .play .road.orange {
stroke: #ffa500;
fill: #ffa500;
}
@@ -668,13 +715,19 @@ div#private-data {
}
.play .spot.orange.city {
stroke-width: 0.5;
}
}*/


.play .blue {
color: #00f;
}
.play .spot.blue, .play .road.blue {
.clickable.blue polygon {
fill: #00f;
}
.clickable.blue path {
stroke: #00f;
}
/*.play .spot.blue, .play .road.blue {
stroke: #00f;
fill: #00f;
}
@@ -683,12 +736,18 @@ div#private-data {
}
.play .spot.blue.city {
stroke-width: 0.5;
}
}*/

.play .white {
color: #fff;
}
.play .spot.white, .play .road.white {
.clickable.white polygon {
fill: #aaa;
}
.clickable.white path {
stroke: #aaa;
}
/*.play .spot.white, .play .road.white {
stroke: #aaa;
fill: #aaa;
}
@@ -697,7 +756,7 @@ div#private-data {
}
.play .spot.white.city {
stroke-width: 0.5;
}
}*/

.yop, .monopoly, .rb, .longest-road {
color: #2b6836;
@@ -755,6 +814,9 @@ polygon.wheat {
polygon.ore {
fill: url(#pattern-ore);
}
tr.ore {
color: #ddd;
}

.desert {
fill: #ead5c2;
@@ -791,8 +853,9 @@ polygon.desert {
stroke: #222;
stroke-width: 0.2;
}

.port {
stroke: #222;
stroke-width: 0.1;
}

svg#gameboard > * {
@@ -812,10 +875,11 @@ svg#gameboard > rect {
top: 50%;
left: 50%;
}
.modal#moday-trade {
.modal#modal-trade {
display: none;
}
.modal#play-dc {

.modal#modal-play-dc {
display: none;
}

.modal .modal-body {
@@ -853,13 +917,6 @@ svg#gameboard > rect {
stroke: #420;
}

.private-data-table {
background-color: #999;
}
.private-data-table th {
padding: 0em 1em;
}

#public-trade {
display: flex;
justify-content: space-between;
@@ -870,3 +927,79 @@ svg#gameboard > rect {
stroke: #B5651D;
stroke-width: 0.05;
}

.clickable .spot-settlement, .clickable .spot-city {
display: none;
stroke: #000;
stroke-width: 0.04;
}

.active.init-settleable .spot-settlement, .active.settleable .spot-settlement {
display: inline;
fill: #fff;
}
.active.init-settleable .spot-settlement:hover, .active.settleable .spot-settlement:hover {
fill: #000;
}

#gameboard .active.fortifiable .spot-city {
fill: #fff;
}
#gameboard .active.fortifiable .spot-city:hover {
fill: #000;
}

.active.init-paveable .road, .active.paveable .road {
stroke: #fff;
}
.active.init-paveable .road:hover, .active.paveable .road:hover {
stroke: #000;
}

#public-data {
margin-bottom: 5px;
}

table.play {
font-size: 0.9em;
border-collapse: collapse;
}

table.play {
background-color: #222;
}
table.play th {
padding: 0em 0.5em;
}
table.play {
border-left: 5px solid #222;
border-right:5px solid #222;
}


tr.play:first-child {
border-left: 1px solid #222;
}
tr.play.header:first-child {
border-left: none;
}

tr.play th {
background-color: #222;
color: #fff;
border-bottom: 1px solid #222;
font-weight: 500;
}
tr.play th:first-child {
border-radius: 5px 0 0;
}
tr.play th:last-child {
border-radius: 0 5px 0 0;
}

tr.play td {
background-color: #ddd;
color: #222;
border-bottom: 1px solid #222;
font-weight: 300;
}
@@ -1 +1,8 @@
pymongo
certifi==2018.1.18 --hash=sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296 --hash=sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d
chardet==3.0.4 --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691
idna==2.6 --hash=sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f --hash=sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4
requests==2.18.4 --hash=sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b --hash=sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e
six==1.11.0 --hash=sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9 --hash=sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb
socketio-client==0.7.2 --hash=sha256:64cd84fba79cf97f28c11e64d1fc42a2221f2d7a4fada05ab381e2d73d74d2c1
urllib3==1.22 --hash=sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b --hash=sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f
websocket-client==0.47.0 --hash=sha256:188b68b14fdb2d8eb1a111f21b9ffd2dbf1dbc4e4c1d28cf2c37cdbf1dd1cae6 --hash=sha256:a453dc4dfa6e0db3d8fd7738a308a88effe6240c59f3226eb93e8f020c216149
@@ -14,22 +14,70 @@
<div class="play content">

<div class="frame" id="control">
<div class="panel" id="buttons">
<button onclick="location.href='/lobby';" id="lobby">Go to lobby</button>
</div>

<div class="panel" id="game-data">
<table id="public-data">

<table id="public-data" class="play">
<tr class="header">
<th id="public-name">name</th>
<th id="public-score">vp</th>
<th id="public-score">points</th>
<th id="public-resources">resources</th>
<th id="public-longest-road">road</th>
<th id="public-dev-cards">dev cards</th>
<th id="public-knights">knights</th>
</tr>
<% for (let i=0; i< public.players.length; i++) { %>
<tr class="<%= public.players[i].color %>">
<td><strong><%= public.players[i].lobbyData.name %></strong></td>
<td><strong id="<%= i %>-score"></strong></td>
<td><strong id="<%= i %>-resources"></strong></td>
<td><strong id="<%= i %>-longest-road"></strong></td>
<td><strong id="<%= i %>-dev-cards"></strong></td>
<td><strong id="<%= i %>-knights"></strong></td>
</tr>
<% } %>
</table>
<div id="private-data"></div>

<% if (private !== null) { %>
<div id="private-data">
<table id="private-resources" class="play private-data-table">
<tr class="header">
<th colspan="100">resources</th>
<% for (let res in private.resources) { %>
<tr class="<%= res %>">
<td><%= res %></td>
<td id="num-<%= res %>"></td>
<td><button type="button" class="discard" name="<%= res %>">discard</button></td>
</tr>
<% } %>
</tr>
</table>
<table id="private-dev-cards" class="play private-data-table">
<tr class="header">
<th colspan="100">dev cards</th>
</tr>
<% for (let dc in private.unplayedDCs) { %>
<tr class="<%= dc %>">
<td><%= dc %></td>
<td id="num-<%= dc %>"></td>
<td><button type="button" class="play" name="<%= dc %>">play</button></td>
</tr>
<% } %>
</table>
</div>
<% } %>

<div id="public-trade">
<div id="public-trade-current"></div>
<div id="public-trade-buttons">
<button type="button" id="cancelTrade">cancel</button>
<button type="button" id="acceptTrade">accept</button>
<button type="button" id="declineTrade">decline</button>
</div>
</div>

<div id="waiting-for"></div>
</div>

@@ -38,65 +86,130 @@
</div>

<div class="frame" id="game">
<div id="dice">
<%- include( 'svg/die.ejs' ) %>
<%- include( 'svg/die.ejs' ) %>
<div id="board-floats">
<div id="dice" title="Roll the dice">
<%- include( 'svg/die.ejs' ) %>
<%- include( 'svg/die.ejs' ) %>
</div>
<br />
<div id="buttons">
<div id="endTurn" title="End your turn">
<strong>end turn</strong>
</div>
<div id="buyDevelopmentCard" title="Buy a development card">
<strong>buy dev card</strong>
</div>
<div id="offerTrade" title="Trade with a player or the bank">
<strong>trade</strong>
</div>
<div id="exitGame" title="Exit to lobby">
<strong>exit</strong>
</div>
</div>
</div>

<%- include( 'svg/standard.ejs' ) %>

<div id="modal-trade" class="modal" style="display:none;">
<div class="modal-header">
Offer a trade
</div>
<div class="modal-body">
<div class="trade-out">
Give
<table>
<tr>
<th>Resource</th>
<th>Number</th>
</tr>
</table>
<% if (private !== null) { %>
<div id="modal-trade" class="modal">
<div class="modal-header">
Offer a trade
</div>
<div class="trade-in">
Get
<table>
<tr>
<th>Resource</th>
<th>Number</th>
</tr>
</table>
<div class="modal-body">
<div class="trade-out">
Give
<table>
<tr>
<th>Resource</th>
<th>Number</th>
</tr>
<% for (let res in private.resources) { %>
<tr class="<%= res %>">
<td><strong><%= res %></strong></td>
<td>
<button type="button" class="decrement" name="<%= res %>">-</button>
<strong class="resource-count" name="<%= res %>">0</strong>
<button type="button" class="increment" name="<%= res %>">+</button>
</td>
</tr>
<% } %>
</table>
</div>
<div class="trade-in">
Get
<table>
<tr>
<th>Resource</th>
<th>Number</th>
</tr>
<% for (let res in private.resources) { %>
<tr class="<%= res %>">
<td><strong><%= res %></strong></td>
<td>
<button type="button" class="decrement" name="<%= res %>">-</button>
<strong class="resource-count" name="<%= res %>">0</strong>
<button type="button" class="increment" name="<%= res %>">+</button>
</td>
</tr>
<% } %>
</table>
</div>
<div class="trade-with">
With
<table>
<tr>
<td>
<input type="checkbox" name="bank" class="trade-partner bank" />
</td>
<td>the Bank</td>
</tr>
<% if (public.players.length > 1) { %>
<tr>
<th></th>
<th>Players</th>
</tr>
<% for (let i=0; i< public.players.length; i++) { if (i !== private.playerID) { %>
<tr class="player-${i}">
<td>
<input type="checkbox" name="<%= i %>" class="trade-partner player" />
</td>
<td>
<strong class="<%= public.players[i].color %>"><%= public.players[i].lobbyData.name %></strong>
</td>
</tr>
<% } } %>
<button name="select-all" type="button">Select all</button>
<% } %>
</table>
</div>
</div>
<div class="trade-with">
With
<table>
<tr>
<td>
<input type="checkbox" name="bank" class="trade-partner bank" onclick="modals.Trade.toggleCheck(this);" />
</td>
<td>the Bank</td>
</tr>
</table>
<div class="modal-string">
test
</div>
<div class="modal-footer">
<button type="button" name="confirm">Confirm</button>
<button type="cancel" name="cancel">Cancel</button>
</div>
</div>
<div class="modal-string">
test
</div>
<div class="modal-footer">
<button type="button" name="confirm" onclick="modals.Trade.confirm();">Confirm</button>
<button type="cancel" name="cancel" onclick="modals.Trade.cancel();">Cancel</button>
</div>
</div>
<div id="modal-play-dc" class="modal" style="display:none;">
<div class="modal-header"></div>
<div class="dc-resources"></div>
<div class="modal-string"></div>
<div class="modal-footer">
<button type="button" name="confirm" onclick="modals.DC.confirm();">Confirm</button>
<button type="cancel" name="cancel" onclick="modals.DC.cancel();">Cancel</button>
<div id="modal-play-dc" class="modal">
<div class="modal-header"></div>
<div class="dc-resources">
<% for (let res in private.resources) { %>
<button type="button" class="<%= res %>" name="<%= res %>">
<strong class="<%= res %>"><%= res %></strong>
</button>
<% } %>
<button type="button" name="reset">
<strong>reset</strong>
</button>
</div>
<div class="modal-string"></div>
<div class="modal-footer">
<button type="button" name="confirm">Confirm</button>
<button type="button" name="cancel">Cancel</button>
</div>
</div>
</div>
<% } %>

</div>

Large diffs are not rendered by default.