freemarkerdor/src/main/resources/cz/xelfi/quoridor/freemarkerdor/UI/game.fmt
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 01 Dec 2009 22:07:29 +0100
changeset 161 119b4c3f2cb9
parent 151 b9e67a17bd10
child 173 75f006899f4e
permissions -rw-r--r--
As Lastoff likes to resign even when he wants to play, let's move the resign button below the board
jtulach@41
     1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
jtulach@41
     2
<html>
jtulach@41
     3
  <head>
jaroslav@93
     4
    <title>
jaroslav@93
     5
      <#if user = doc.game.@currentPlayer>
jaroslav@93
     6
         ${bundle.YourTurn}
jaroslav@93
     7
      <#else>
jaroslav@93
     8
         ${bundle("Waiting", doc.game.@currentPlayer?string)}
jaroslav@93
     9
      </#if>
jaroslav@93
    10
    </title>
jtulach@41
    11
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
jtulach@136
    12
    <#if user != doc.game.@currentPlayer >
jaroslav@66
    13
        <meta http-equiv="REFRESH" content="60;URL=/games/${doc.game.id.@id}">
jaroslav@66
    14
    </#if>
jaroslav@150
    15
    <#if format?? && format="small">
jaroslav@150
    16
        <meta name="viewport" content="width = 200" />
jaroslav@150
    17
    <#else>
jaroslav@150
    18
        <meta name="viewport" content="width = 460" />
jaroslav@150
    19
    </#if>
jaroslav@111
    20
    <script type="text/javascript">
jaroslav@111
    21
        function paintFence() {
jaroslav@111
    22
            var fifth = fieldSize / 10;
jaroslav@111
    23
            var x = (document.getElementById("column").value.charCodeAt(0) - 64) * fieldSize;
jaroslav@111
    24
            var y = fieldSize * 9 - (document.getElementById("row").value) * fieldSize;
jaroslav@111
    25
            var dx = 0;
jaroslav@111
    26
            var dy = 0;
jaroslav@111
    27
            if (document.getElementById("direction").value.charAt(0) == 'H') {
jaroslav@111
    28
               dx = fieldSize - 2 * fifth;
jaroslav@111
    29
               dy = fifth / 2;
jaroslav@111
    30
            } else {
jaroslav@111
    31
               dx = fifth / 2;
jaroslav@111
    32
               dy = fieldSize - 2 * fifth;
jaroslav@111
    33
            }
jaroslav@111
    34
            var fenceDiv = document.getElementById("fence");
jaroslav@111
    35
            fenceDiv.style.position="absolute";
jaroslav@111
    36
            fenceDiv.style.left = (x - dx) +"px";
jaroslav@111
    37
            fenceDiv.style.top  = (y - dy) +"px";
jaroslav@111
    38
            fenceDiv.style.width = (dx * 2) +"px";
jaroslav@111
    39
            fenceDiv.style.height = (dy * 2) +"px";
jaroslav@111
    40
            fenceDiv.style.backgroundColor = 'black';
jaroslav@111
    41
            fenceDiv.style.visibility = 'visible';
jaroslav@111
    42
         }
jaroslav@112
    43
        function deltas(dir) {
jaroslav@112
    44
            var r = new Object();
jaroslav@112
    45
            r.x = 0;
jaroslav@112
    46
            r.y = 0;
jaroslav@112
    47
            if (dir == 'N') r.y = 1;
jaroslav@112
    48
            if (dir == 'S') r.y = -1;
jaroslav@112
    49
            if (dir == 'E') r.x = 1;
jaroslav@112
    50
            if (dir == 'W') r.x = -1;
jaroslav@112
    51
            return r;
jaroslav@112
    52
        }
jaroslav@112
    53
        function paintPlayer() {
jaroslav@112
    54
            var fifth = fieldSize / 5;
jaroslav@112
    55
            var m1 = deltas(document.getElementById("pdir1").value.charAt(0));
jaroslav@112
    56
            var m2 = deltas(document.getElementById("pdir2").value.charAt(0));
jaroslav@112
    57
jaroslav@112
    58
            var pos = {
jaroslav@112
    59
                x : m1.x + m2.x + playerPos.x,
jaroslav@112
    60
                y : m1.y + m2.y + playerPos.y
jaroslav@112
    61
            }
jaroslav@112
    62
            var fenceDiv = document.getElementById("player");
jaroslav@112
    63
            fenceDiv.style.position="absolute";
jaroslav@112
    64
            fenceDiv.style.left = (pos.x * fieldSize + fifth) +"px";
jaroslav@112
    65
            fenceDiv.style.top  = ((8 - pos.y) * fieldSize + fifth) +"px";
jaroslav@112
    66
            fenceDiv.style.width = (fieldSize - fifth * 2) +"px";
jaroslav@112
    67
            fenceDiv.style.height = (fieldSize - fifth * 2) +"px";
jaroslav@112
    68
            fenceDiv.style.backgroundColor = 'black';
jaroslav@112
    69
            fenceDiv.style.visibility = 'visible';
jaroslav@112
    70
         }
jaroslav@111
    71
         var fieldSize=<#if format?? && format="small">20<#else>50</#if>;
jaroslav@112
    72
         var playerPos = {
jaroslav@112
    73
             x: ${board.currentPlayer.column}, 
jaroslav@112
    74
             y: ${board.currentPlayer.row}
jaroslav@112
    75
        };
jaroslav@111
    76
    </script>
jtulach@41
    77
  </head>
jaroslav@151
    78
  <body bgcolor="white">
jaroslav@137
    79
      <h3><a href="/">${bundle.TITLE_PLAIN}</a></h3>
jaroslav@98
    80
jaroslav@98
    81
      <#macro status who>
jaroslav@98
    82
          ${who?string}
jaroslav@98
    83
          <#if who = doc.game.@currentPlayer>
jaroslav@98
    84
              <#if doc.game.id.@status = "whiteWon" || doc.game.id.@status = "blackWon" >
jaroslav@98
    85
                - ${bundle.HAS_WON}
jaroslav@98
    86
              <#else>
jaroslav@98
    87
                - ${bundle.TO_MOVE}
jaroslav@98
    88
              </#if>
jaroslav@98
    89
          </#if>
jaroslav@98
    90
      </#macro>
jaroslav@98
    91
jaroslav@98
    92
jaroslav@98
    93
      <p>
jaroslav@100
    94
          <b>${bundle.MOVENUMBER}: </b> ${(doc.game.@currentMove?number / 2 + 1)?string("0")}<br>
jaroslav@99
    95
          <b>${bundle.WHITE}:</b> <@status doc.game.id.@white/> ${bundle("FENCES_LEFT", board.players[0].fences)}<br>
jaroslav@99
    96
          <b>${bundle.BLACK}:</b> <@status doc.game.id.@black/> ${bundle("FENCES_LEFT", board.players[1].fences)}<br>
jaroslav@98
    97
      </p>
jaroslav@56
    98
jaroslav@56
    99
      <p>
jaroslav@100
   100
      <#if (doc.game.@currentMove?number > 0)>
jaroslav@100
   101
        <a href="/games/${doc.game.id.@id}?move=${doc.game.@currentMove?number - 1}">${bundle.PREVIOUS}</a>
jaroslav@100
   102
      <#else>
jaroslav@100
   103
        ${bundle.PREVIOUS}
jaroslav@100
   104
      </#if>
jaroslav@100
   105
      <a href="/games/${doc.game.id.@id}"">${bundle.LATEST}</a>
jaroslav@100
   106
      <#if (doc.game.@currentMove?number < doc.game.moves.*?size)>
jaroslav@100
   107
        <a href="/games/${doc.game.id.@id}?move=${doc.game.@currentMove?number + 1}">${bundle.NEXT}</a>
jaroslav@100
   108
      <#else>
jaroslav@100
   109
        ${bundle.NEXT}
jaroslav@100
   110
      </#if>
jaroslav@56
   111
      </p>
jaroslav@56
   112
      
jaroslav@56
   113
      <#if message?? >
jaroslav@56
   114
        <p>
jaroslav@56
   115
            <span style="color: red">${message}</span>
jaroslav@56
   116
        </p>
jaroslav@56
   117
      </#if>
jaroslav@56
   118
jaroslav@66
   119
      <#assign play = false>
jaroslav@66
   120
jtulach@77
   121
      <#if doc.game.id.@status = "whiteMove" || doc.game.id.@status = "blackMove" >
jaroslav@66
   122
          <#assign play = user = doc.game.@currentPlayer>
jaroslav@66
   123
      </#if>
jaroslav@66
   124
      <#if  play>
jaroslav@56
   125
          <form action="/games/${doc.game.id.@id}/move">
jaroslav@55
   126
              <input type="hidden" name="type" value="fence" readonly="readonly"/>
jaroslav@111
   127
              <select name="column" id="column" onchange="paintFence()">
jaroslav@55
   128
                  <option>A</option>
jaroslav@55
   129
                  <option>B</option>
jaroslav@55
   130
                  <option>C</option>
jaroslav@55
   131
                  <option>D</option>
jaroslav@55
   132
                  <option>E</option>
jaroslav@55
   133
                  <option>F</option>
jaroslav@55
   134
                  <option>G</option>
jaroslav@55
   135
                  <option>H</option>
jaroslav@55
   136
              </select>
jaroslav@111
   137
              <select name="row" id="row" onchange="paintFence()">
jaroslav@55
   138
                  <option>1</option>
jaroslav@55
   139
                  <option>2</option>
jaroslav@55
   140
                  <option>3</option>
jaroslav@55
   141
                  <option>4</option>
jaroslav@55
   142
                  <option>5</option>
jaroslav@55
   143
                  <option>6</option>
jaroslav@55
   144
                  <option>7</option>
jaroslav@55
   145
                  <option>8</option>
jaroslav@55
   146
              </select>
jaroslav@111
   147
              <select name="direction" id="direction" onchange="paintFence()">
jaroslav@111
   148
                  <option value="H">${bundle.H}</option>
jaroslav@111
   149
                  <option value="V">${bundle.V}</option>
jaroslav@55
   150
              </select>
jaroslav@59
   151
              <input type="submit" value="${bundle.PLACE}" />
jaroslav@55
   152
          </form>
jaroslav@61
   153
          <form action="/games/${doc.game.id.@id}/move">
jaroslav@55
   154
              <input type="hidden" name="type" value="move" readonly="readonly"/>
jaroslav@112
   155
              <select id="pdir1" name="direction" onchange="paintPlayer()">
jaroslav@112
   156
                  <option value="E">${bundle.E}</option>
jaroslav@112
   157
                  <option value="W">${bundle.W}</option>
jaroslav@112
   158
                  <option value ="N" <#if doc.game.id.@status = "whiteMove">selected="true"</#if>>${bundle.N}</option>
jaroslav@112
   159
                  <option value ="S" <#if doc.game.id.@status = "blackMove">selected="true"</#if>>${bundle.S}</option>
jaroslav@55
   160
              </select>
jaroslav@112
   161
              <select id="pdir2" name="direction-next" onchange="paintPlayer()">
jaroslav@55
   162
                  <option></option>
jaroslav@112
   163
                  <option value="E">${bundle.E}</option>
jaroslav@112
   164
                  <option value="W">${bundle.W}</option>
jaroslav@112
   165
                  <option value="N">${bundle.N}</option>
jaroslav@112
   166
                  <option value="S">${bundle.S}</option>
jaroslav@55
   167
              </select>
jaroslav@59
   168
              <input type="submit" value="${bundle.MOVE}" />
jaroslav@55
   169
          </form>
jaroslav@55
   170
      </#if>
jaroslav@100
   171
      <p>
jaroslav@95
   172
      <#if format?? && format = "text">
jaroslav@95
   173
        <pre>${doc.game.board}</pre>
jaroslav@105
   174
        ${bundle.BOARD_VIEW}
jaroslav@100
   175
        <a href="/games/${doc.game.id.@id}?format=small">${bundle.BOARD_SMALL}</a>
jaroslav@98
   176
        <a href="/games/${doc.game.id.@id}?format=image">${bundle.BOARD_IMAGE}</a>
jaroslav@100
   177
        ${bundle.BOARD_TEXT}
jaroslav@100
   178
      <#elseif format?? && format = "small">
jaroslav@111
   179
        <p/>
jaroslav@111
   180
        <div style="position: relative; height:180px;">
jaroslav@111
   181
            <img style="position: absolute; left: 0; right: 0;"
jaroslav@111
   182
                 width="180" height="180 "
jaroslav@111
   183
                 src="/games/${doc.game.id.@id}.png?fieldSize=20<#if doc.game.@currentMove??>&move=${doc.game.@currentMove}</#if>"
jaroslav@111
   184
                 alt="${bundle.BOARD_TEXT}"
jaroslav@111
   185
             >
jaroslav@112
   186
            <div id="fence" style="position: absolute; left: 0; right: 0;"></div>
jaroslav@112
   187
            <div id="player" style="position: absolute; left: 0; right: 0;"></div>
jaroslav@111
   188
        </div>
jaroslav@105
   189
        ${bundle.BOARD_VIEW}
jaroslav@100
   190
        ${bundle.BOARD_SMALL}
jaroslav@100
   191
        <a href="/games/${doc.game.id.@id}?format=image">${bundle.BOARD_IMAGE}</a>
jaroslav@100
   192
        <a href="/games/${doc.game.id.@id}?format=text">${bundle.BOARD_TEXT}</a>
jaroslav@95
   193
      <#else>
jaroslav@111
   194
        <div style="position: relative; height:450px;">
jaroslav@111
   195
            <img style="position: absolute; left: 0; right: 0;"
jaroslav@111
   196
                 width="450" height="450"
jaroslav@111
   197
                 src="/games/${doc.game.id.@id}.png<#if doc.game.@currentMove??>?move=${doc.game.@currentMove}</#if>"
jaroslav@111
   198
                 alt="${bundle.BOARD_TEXT}"
jaroslav@111
   199
             >
jaroslav@112
   200
            <div id="fence" style="position: absolute; left: 0; right: 0;"></div>
jaroslav@112
   201
            <div id="player" style="position: absolute; left: 0; right: 0;"></div>
jaroslav@111
   202
        </div>
jaroslav@105
   203
        ${bundle.BOARD_VIEW}
jaroslav@100
   204
        <a href="/games/${doc.game.id.@id}?format=small">${bundle.BOARD_SMALL}</a>
jaroslav@100
   205
        ${bundle.BOARD_IMAGE}
jaroslav@98
   206
        <a href="/games/${doc.game.id.@id}?format=text">${bundle.BOARD_TEXT}</a>
jaroslav@95
   207
      </#if>
jtulach@161
   208
      <p>
jtulach@161
   209
      <#if  play>
jtulach@161
   210
          <form action="/games/${doc.game.id.@id}/move">
jtulach@161
   211
              <input type="hidden" name="type" value="resign" readonly="readonly"/>
jtulach@161
   212
              <input type="submit" value="${bundle.RESIGN}" />
jtulach@161
   213
          </form>
jtulach@161
   214
      </#if>
jaroslav@95
   215
jaroslav@100
   216
      <#macro printMove item>
jaroslav@100
   217
        <#if item.@index = doc.game.@currentMove>
jaroslav@100
   218
            <b>${item.@move}</b>
jaroslav@100
   219
        <#else>
jaroslav@100
   220
            <a href="/games/${doc.game.id.@id}?move=${item.@index}">${item.@move}</a>
jaroslav@100
   221
        </#if>
jaroslav@100
   222
      </#macro>
jaroslav@60
   223
jaroslav@100
   224
      <h3><a href="/games/${doc.game.id.@id}?move=0">${bundle.MOVES}</a></h3>
jaroslav@60
   225
jaroslav@60
   226
      <table border="0">
jaroslav@60
   227
          <thead>
jaroslav@60
   228
              <tr>
jaroslav@60
   229
                  <th>${bundle.MOVENUMBER}</th>
jaroslav@60
   230
                  <th>${doc.game.id.@white}</th>
jaroslav@60
   231
                  <th>${doc.game.id.@black}</th>
jaroslav@60
   232
              </tr>
jaroslav@60
   233
          </thead>
jaroslav@60
   234
          <tbody>
jaroslav@61
   235
              <#assign index = 0>
jaroslav@60
   236
              <#list doc.game.moves.* as item>
jaroslav@100
   237
                
jaroslav@60
   238
                <#if item.@index?number % 2 = 1>
jaroslav@61
   239
                    <#assign index = index + 1>
jaroslav@100
   240
                    <tr><td>${index}</td><td><@printMove item/></td>
jaroslav@60
   241
                <#else>
jaroslav@100
   242
                    <td><@printMove item/></td></tr>
jaroslav@60
   243
                </#if>
jaroslav@60
   244
              </#list>
jaroslav@60
   245
          </tbody>
jaroslav@60
   246
      </table>
jaroslav@115
   247
jaroslav@138
   248
      <h3>${bundle.TALK}</h3>
jaroslav@115
   249
jaroslav@115
   250
      <ul>
jaroslav@115
   251
      <#list doc.game.moves.item.comment as item>
jaroslav@115
   252
        <li><b>${item.@who}</b>: ${item}</li>
jaroslav@115
   253
      </#list>
jaroslav@115
   254
      </ul>
jaroslav@115
   255
jaroslav@115
   256
      <form action="/games/${doc.game.id.@id}/comment">
jaroslav@115
   257
          <textarea rows="2" cols="80" name="comment"></textarea>
jaroslav@115
   258
          <input type="submit"/>
jaroslav@115
   259
      </form>
jaroslav@115
   260
jaroslav@88
   261
      <hr/>
jaroslav@88
   262
      ${bundle("copyright", version)}
jtulach@41
   263
  </body>
jtulach@41
   264
</html>