Browse Source

rmove BERT to JSON transformations

Maxim Sokhatsky 11 years ago
parent
commit
0ace307fa9

+ 27 - 22
apps/web/priv/static/app/Kakaranet-Scene.svg

@@ -4,17 +4,18 @@
     <title>Kakaranet-Scene</title>
     <desc>Created with Sketch.</desc>
     <defs>
-        <linearGradient x1="50%" y1="23.2979243%" x2="50%" y2="61.110645%" id="linearGradient1">
-            <stop id="grad" stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
-            <stop id="grad" stop-color="#FFFFFF" offset="100%"></stop>
-        </linearGradient>
-        <linearGradient x1="50%" y1="0%" x2="50%" y2="86.2723214%" id="linearGradient2">
-            <stop id="grad" stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
-            <stop id="grad" stop-color="#FFFFFF" offset="100%"></stop>
-        </linearGradient>
     <clipPath id="myClip1"><rect id="Clip-Path-Left" x="0" y="0" width="216" height="400"/></clipPath>
     <clipPath id="myClip2"><rect id="Clip-Path-Right" x="0" y="0" width="216" height="400"/></clipPath>
     <clipPath id="myClip3"><rect id="Clip-Path-Left-Chat" x="0" y="0" width="216" height="400"/></clipPath>
+
+        <linearGradient x1="50%" y1="23.2979243%" x2="50%" y2="61.110645%" id="linearGradient-1">
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="50%" y1="0%" x2="50%" y2="86.2723214%" id="linearGradient-2">
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" offset="100%"></stop>
+        </linearGradient>
     </defs>
     <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
         <g id="Kakaranet-12-maxim" sketch:type="MSLayerGroup" transform="translate(-1.000000, 0.000000)">
@@ -385,18 +386,18 @@
             <g id="Mustafa-Discard" transform="translate(373.000000, 261.000000)" fill="#B5C6D8" sketch:type="MSShapeGroup">
                 <rect id="Shape" x="0" y="0" width="40" height="60" rx="8"></rect>
             </g>
-            <rect id="Left-Bar" opacity="0.64" fill="url(#linearGradient1)" sketch:type="MSShapeGroup" x="3" y="91" width="213" height="456" rx="5"></rect>
+            <rect id="Left-Bar" opacity="0.64" fill="url(#linearGradient-1)" sketch:type="MSShapeGroup" x="3" y="91" width="213" height="456" rx="5"></rect>
             <g id="Have-8-Tashes" transform="translate(649.000000, 614.000000)">
                 <rect id="Rectangle" fill="#48AF5E" sketch:type="MSShapeGroup" x="0" y="0" width="40" height="35" rx="5"></rect>
-                <text id="8" fill="#FFFFFF" sketch:type="MSTextLayer" transform="translate(19.000000, 16.000000) scale(-1, 1) translate(-19.000000, -16.000000) " font-family="Exo 2" font-size="17" font-weight="normal" sketch:alignment="middle">
-                    <tspan x="13.8405" y="23">8</tspan>
+                <text id="8" fill="#FFFFFF" sketch:type="MSTextLayer" transform="translate(21.000000, 16.000000) scale(-1, 1) translate(-21.000000, -16.000000) " font-family="Exo 2" font-size="17" font-weight="normal" sketch:alignment="middle">
+                    <tspan x="15.8405" y="23">8</tspan>
                 </text>
             </g>
-            <rect id="Right-Bar" opacity="0.762360075" fill="url(#linearGradient2)" sketch:type="MSShapeGroup" x="857" y="91" width="214" height="456" rx="5"></rect>
+            <rect id="Right-Bar" opacity="0.762360075" fill="url(#linearGradient-2)" sketch:type="MSShapeGroup" x="857" y="91" width="214" height="456" rx="5"></rect>
             <g id="Okey" transform="translate(696.000000, 614.000000)">
                 <rect id="Rectangle" fill="#517ECE" sketch:type="MSShapeGroup" x="0" y="0" width="84" height="35" rx="5"></rect>
-                <text fill="#FFFFFF" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal">
-                    <tspan x="24.1611328" y="21.5">Okey</tspan>
+                <text fill="#FFFFFF" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal" sketch:alignment="middle">
+                    <tspan x="24.096" y="21.5">Okey</tspan>
                 </text>
             </g>
             <g id="Settings" transform="translate(466.000000, 615.000000)" sketch:type="MSShapeGroup">
@@ -408,16 +409,16 @@
                 <path d="M16.281,10.115 L13.473,10.115 C13.131,10.115 12.852,10.391 12.852,10.736 L12.852,24.244 C12.852,24.586 13.131,24.865 13.473,24.865 L16.282,24.865 C16.627,24.865 16.903,24.586 16.903,24.244 L16.903,10.736 C16.903,10.393 16.625,10.115 16.281,10.115" id="Shape" fill="#517ECE"></path>
                 <path d="M23.975,10.115 L21.166,10.115 C20.823,10.115 20.547,10.391 20.547,10.736 L20.547,24.244 C20.547,24.586 20.823,24.865 21.166,24.865 L23.975,24.865 C24.319,24.865 24.596,24.586 24.596,24.244 L24.596,10.736 C24.596,10.393 24.319,10.115 23.975,10.115" id="Shape" fill="#517ECE"></path>
             </g>
-            <g id="Point-Table" transform="translate(292.000000, 615.000000)">
-                <rect id="Rectangle" fill="#FFFFFF" sketch:type="MSShapeGroup" x="0" y="0" width="123" height="35" rx="5"></rect>
-                <text fill="#517ECE" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal">
-                    <tspan x="21.5935059" y="23">Point Table</tspan>
+            <g id="Point-Table" transform="translate(290.000000, 615.000000)">
+                <rect id="Rectangle" fill="#FFFFFF" sketch:type="MSShapeGroup" x="2" y="0" width="123" height="35" rx="5"></rect>
+                <text fill="#517ECE" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal" sketch:alignment="middle">
+                    <tspan x="18.983" y="23">Point Table</tspan>
                 </text>
             </g>
-            <g id="Rules" transform="translate(512.000000, 615.000000)">
-                <rect id="Rules-Rectangle" fill="#FFFFFF" sketch:type="MSShapeGroup" x="0" y="0" width="74" height="35" rx="5"></rect>
-                <text id="Rules-Text" fill="#517ECE" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal">
-                    <tspan x="14.5935059" y="23">Rules</tspan>
+            <g id="Rules" transform="translate(508.000000, 615.000000)">
+                <rect id="Rules-Rectangle" fill="#FFFFFF" sketch:type="MSShapeGroup" x="4" y="0" width="108.078947" height="35" rx="5"></rect>
+                <text id="Rules-Text" fill="#517ECE" sketch:type="MSTextLayer" font-family="Exo 2" font-size="17" font-weight="normal" sketch:alignment="middle">
+                    <tspan x="32.4555263" y="23">Rules</tspan>
                 </text>
             </g>
             <g id="Create" transform="translate(865.000000, 526.000000)" sketch:type="MSShapeGroup">
@@ -474,6 +475,7 @@
         <path d="M717.82681,16 L698.143994,16 C695.854843,16 694,17.8548426 694,20.1430683 L694,50.1835548 C694,52.4717805 695.854843,54.3266231 698.143994,54.3266231 L717.82681,54.3266231 C720.115036,54.3266231 721.969878,52.4717805 721.969878,50.1835548 L721.969878,20.1430683 C721.968952,17.8548426 720.115036,16 717.82681,16 L717.82681,16 L717.82681,16 Z M707.985865,41.0399123 C704.737344,41.0399123 702.108338,38.4072025 702.108338,35.1623855 C702.108338,31.9147904 704.737344,29.2848588 707.985865,29.2848588 C711.230682,29.2848588 713.863392,31.9147904 713.863392,35.1623855 C713.863392,38.4090546 711.230682,41.0399123 707.985865,41.0399123 L707.985865,41.0399123 L707.985865,41.0399123 Z" id="Okey-Tash-Logo-3" fill="#F6A623" sketch:type="MSShapeGroup"></path>
         <path d="M754.82681,16 L735.143994,16 C732.854843,16 731,17.8548426 731,20.1430683 L731,50.1835548 C731,52.4717805 732.854843,54.3266231 735.143994,54.3266231 L754.82681,54.3266231 C757.115036,54.3266231 758.969878,52.4717805 758.969878,50.1835548 L758.969878,20.1430683 C758.968952,17.8548426 757.115036,16 754.82681,16 L754.82681,16 L754.82681,16 Z M744.985865,41.0399123 C741.737344,41.0399123 739.108338,38.4072025 739.108338,35.1623855 C739.108338,31.9147904 741.737344,29.2848588 744.985865,29.2848588 C748.230682,29.2848588 750.863392,31.9147904 750.863392,35.1623855 C750.863392,38.4090546 748.230682,41.0399123 744.985865,41.0399123 L744.985865,41.0399123 L744.985865,41.0399123 Z" id="Okey-Tash-Logo-4" fill="#517ECE" sketch:type="MSShapeGroup"></path>
     </g>
+
     <foreignObject id="GameChatEditor" x="864" y="504" width="198" height="120" onmouseover="barHover(evt);" onmouseout="barHoverOut(evt);">
         <div xmlns:data="Chat" id="edit" contentEditable="true"
           style="padding:4px;background-color:#FFF687;color:#3B5998;font-family:'Exo 2';font-size:16px;"
@@ -485,4 +487,7 @@
           style="padding:4px;background-color:#FFF687;color:#3B5998;font-family:'Exo 2';font-size:16px;"
          xmlns="http://www.w3.org/1999/xhtml">Write here some text.</div>
     </foreignObject>
+
+
+
 </svg>

+ 1 - 0
apps/web/priv/static/app/index.htm

@@ -23,6 +23,7 @@
     <script src="js/player.js"></script>
     <script src="js/chat.js"></script>
     <script src="js/roster.js"></script>
+    <script src="js/translations.js"></script>
 
     <script src="js/okey/okey_protocol.js"></script>
     <script src="js/okey/hand.js"></script>

+ 19 - 6
apps/web/priv/static/app/js/bootloader.js

@@ -85,7 +85,7 @@ function PatchSVG()
 
        playerInifoOnClick.map(function(x) { 
             document.getElementById(x).style.cursor = "pointer";
-            document.getElementById(x).onclick = showPlayerInfo; });
+            document.getElementById(x).onclick = requestPlayerInfo; });
 
     var onlineListOnClick = [
         "Online-Users",
@@ -135,10 +135,17 @@ function PatchSVG()
 
 //    document.addEventListener('touchmove',function(e) {e.preventDefault();},false);
     $svg.attr({preserveAspectRatio:"xMidYMid meet",width:"100%",height:"100%"});
+    
+    document.getElementById("Users-Online-Message").firstElementChild.textContent = i18n("Online");
+    document.getElementById("OnlineChatEditor").firstElementChild.textContent = i18n("EditMessage");
+    document.getElementById("GameChatEditor").firstElementChild.textContent = i18n("EditMessage");
+    $("#Point-Table").find("text")[0].lastElementChild.textContent = i18n("Statistics");
+    $("#Rules").find("text")[0].lastElementChild.textContent = i18n("Rules");
+    $("#Kakush")[0].lastElementChild.textContent = i18n("Kakush") + ": " + 0;
 }
 
 function initChatSample() {
-    chatMessage("Chat","0","Maxim","Kakaranet:\nThis is in-game chat");
+    chatMessage("Chat","0","Maxim","Kakaranet:\n"+i18n("GameChat"));
     barHover();
     mouseWheelHandler({'detail':-100000,'wheelDelta':-100000});
     barHoverOut();
@@ -181,11 +188,8 @@ function showRules()
     });
 }
 
-function showPlayerInfo()
+function displayPlayerInfo(fun)
 {
-    ws.send(enc(tuple(atom('client'),
-        tuple(atom('stats_action'),bin(document.user),atom('game_okey')))));
-
     $.load("svg/Player-Statistics.svg", function(h) {
         var rules = document.getElementById("Player-Statistics");
         if (null == rules) {
@@ -197,7 +201,16 @@ function showPlayerInfo()
         }
         rules.style.display = 'block';
 
+        fun();
+
     });
+
+}
+
+function requestPlayerInfo()
+{
+    ws.send(enc(tuple(atom('client'),
+        tuple(atom('stats_action'),bin(document.user),atom('game_okey')))));
 }
 
 function onPlayerInfoClose(evt) {

+ 4 - 3
apps/web/priv/static/app/js/chat.js

@@ -135,12 +135,12 @@ function addOnlineUser(name,full_name,score,insertMode) {
     var y = (insertMode == "insertTop") ? 0 : listElement.getBBox().height;
     var html = '<g xmlns="http://www.w3.org/2000/svg" height="60" transform="translate(0, '+y+')">' +
             '<g xmlns:data="'+name+'" fill="#DBEBED" '+eventsColor+'>' +
-            '    <rect cursor="pointer" xmlns:data="'+name+'" fill="#DBEBED" id="'+name+'" x="10" y="0" width="196" height="48" ' +'></rect></g>' +
+            '    <rect cursor="pointer" xmlns:data="'+name+'" fill="#DBEBED" id="'+name+'" x="10" y="0" width="196" height="48" ' +'>'+full_name+'</rect></g>' +
             '<text xmlns:data="'+name+'" '+eventsColor+' '+
             'font-family="Exo 2" font-size="18" cursor="pointer" font-weight="normal" line-spacing="18"'+
             ' fill="#3B5998">' +
                 '<tspan xmlns:data="'+name+'" font-weight="normal" fill="'+color+'" x="19" y="22">'+full_name+'</tspan>' + 
-                '<tspan xmlns:data="'+name+'" font-size="14" x="19" y="40">Score: '+score+' </tspan></text>'+
+                '<tspan xmlns:data="'+name+'" font-size="14" x="19" y="40">'+i18n("Score")+': '+score+' </tspan></text>'+
             '<rect '+
             '  x="10" y="48" width="196" height="8"></rect></g>';
     var element = svg(html);
@@ -185,12 +185,13 @@ function openChat(evt) {
     document.getElementById("Online-List").style.display = 'none';
     document.getElementById("onlineChatEdit").style.display = '';
     var name = evt.target.getAttribute("xmlns:data");
+    var full_name = $("#Online-List").find("#"+name)[0].textContent;
     currentChat = "Chat+"+name;
     var chatElement = document.getElementById(currentChat);
     if (null == chatElement) {
         // read from local KVS
         createChat(currentChat);
-        chatMessage(currentChat,"1","System","You can chat with\n"+name);
+        chatMessage(currentChat,"1","System",full_name+" "+i18n("PrivateChat"));
     }
     document.getElementById(currentChat).style.display = '';
     document.getElementById("onlineChatEdit").setAttribute("xmlns:data",currentChat);

+ 2 - 2
apps/web/priv/static/app/js/okey/deck.js

@@ -30,7 +30,7 @@ function DeckScope(scope) {
             var count = 0;
             this.each(function(c, i, j) {
                 if (null != c && (this.cards[j][i] = null, c.$el.remove()), 0 == j && count < tiles.length) {
-                    var tile = tiles[count], card = new scope.Card({
+                    var tile = tiles[count].value[0], card = new scope.Card({
                         color: scope.CARD_COLORS[tile[1] - 1],
                         value: tile[2]
                     });
@@ -57,7 +57,6 @@ function DeckScope(scope) {
             this.each(function(card, i, j) {
                 if (null != card) {
                     card.$el.attr("transform", "translate(" + this.trfs[j][i].x + " " + this.trfs[j][i].y + ")");
-//                    console.log(card.$el[0]);
                     card.drag();
                     this.$el.append(card.$el[0]);
                 }
@@ -127,6 +126,7 @@ function DeckScope(scope) {
         },
 
         place: function(target, x, y) {
+
             var trfs = this.trfs, pos = this.$dropPlace.position(), width = this.$dropPlace.width(), height = this.$dropPlace.height(), placeWidth = Math.round(width / 15), placeHeight = Math.round(height / 2), truePosX = Math.floor((x - pos.left) / placeWidth), posY = Math.floor((y - pos.top) / placeHeight);
             scope.Card.selected.sort(function(a, b) {
                 return (a.pos.x > b.pos.x) - (b.pos.x > a.pos.x);

+ 1 - 1
apps/web/priv/static/app/js/okey/hand.js

@@ -35,7 +35,7 @@ function HandScope(scope) {
 
         discard: function(tile) {
             var card = new scope.Card({
-                color: scope.CARD_COLORS[tile[1] - 1],
+                color: scope.CARD_COLORS[tile[1]-1],
                 value: tile[2]
             });
             this.cards.push(card), this.render(), card.drag(), card.dragHandler.disable(), this.$topCard.append(card.$el[0]); },

+ 107 - 96
apps/web/priv/static/app/js/okey/okey.js

@@ -11,9 +11,7 @@ function PostLoad()
     $overlay = $("#overlay");
 
     var centralCard;
-
     scope.apiProvider = new scope.ApiProvider({url: scope.apiUrl, gameId: scope.gameId });
-
     createCentralCard();
 
     var $gosterme = $("#Gosterme");
@@ -62,12 +60,10 @@ function PostLoad()
 
     });
 
-    scope.apiProvider.on("okey_game_started", initOkeyScene);
-    scope.apiProvider.on("okey_game_player_state", initOkeyScene);
+    scope.apiProvider.on("okey_game_started", freshGame);
+    scope.apiProvider.on("okey_game_player_state", inGameJoined);
 
     scope.apiProvider.on("okey_game_info", function(x) {
-
-
         var e = {detail: x.detail.json, raw: x.detail.bert};
         var playersPositions = scope.playersPositions;
         scope.user = document.user;
@@ -86,7 +82,8 @@ function PostLoad()
                 if (playerName == scope.user) { playersPositions = playersPositions[i]; break; }
             }
 
-            for (var playerInfo, i = 0, l = players.length; l > i; i++) {
+            for (var playerInfo, i = 0, l = players.length; l > i; i++)
+            {
                 playerInfo = players[i].value[0];
                 scope.playersMap[playerInfo[1].value] = scope.playersMap[playerInfo[1].value] || new scope.Player({
                     position: playersPositions[i],
@@ -96,46 +93,36 @@ function PostLoad()
                 var prevPlayer = i == players.length - 1 ? players[0].value[0][1].value : players[i + 1].value[0][1].value;
                 for (var prop in scope.playersLeftHandsMap) scope.playersLeftHandsMap[prop].clear();
                 scope.playersLeftHandsMap[prevPlayer] = scope.playersRightHandsMap[playerInfo[1].value] = new scope.Hand("#" + [ "Player", playersPositions[i], "Hand" ].join("-")), 
-                "Me" == playersPositions[i] && scope.playersRightHandsMap[playerInfo[1].value].$el.droppable({
-                    accept: function() {
-                        return playerTurn && scope.deck.length() > 14;
-                    },
-                    drop: function(target) {
-                        scope.apiProvider.actionDiscard(target.owner);
-                    }
-                });
-
 
+                "Me" == playersPositions[i] && 
+                scope.playersRightHandsMap[playerInfo[1].value].$el.droppable({
+                    accept: function() { return playerTurn && scope.deck.length() > 14; },
+                    drop: function(target) { scope.apiProvider.actionDiscard(target.owner); }
+                });
             }
 
-            scope.playersMap[scope.user].timer.on('beforeTimerEnd', function(){ scope.Draggable.revert() })
-
+            scope.playersMap[scope.user].timer.on('beforeTimerEnd', function(){ scope.Draggable.revert() });
             scope.started = !0;
         }
     }),
 
     scope.apiProvider.on("okey_next_turn", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
+        var player = dec(e.raw).value[0][3][0].value[0][1].value;
         for (var playerName in scope.playersMap) scope.playersMap[playerName].unselect();
 
-        if (scope.playersMap[e.detail.player].select(), e.detail.player == scope.user)
+        if (scope.playersMap[player].select(), player == scope.user)
         {
             playerTurn = !0;
-            var cards = scope.playersLeftHandsMap[e.detail.player].cards;
+            var cards = scope.playersLeftHandsMap[player].cards;
             if (cards.length)
             {
-                var card = cards[cards.length - 1];
-                scope.deck.$el.append(card.$el[0]), card.$el.attr({
-                    transform: "translate(16 -65)"
-                }), 
-                card.dragHandler.enable(), 
-                card
-                    .on("dragstart", scope.deck.select)
+                var card = cards[cards.length-1];
+                scope.deck.$el.append(card.$el[0]), card.$el.attr({ transform: "translate(16 -65)"}),
+                card.dragHandler.enable(),
+                card.on("dragstart", scope.deck.select)
                     .on("dragmove", scope.deck.track)
-                    
-                card.$el.doubletap(function(){
-                    scope.apiProvider.actionTake(card) 
-                });
+                card.$el.doubletap(function(){ scope.apiProvider.actionTake(card) });
             }
             scope.deck.length() < 15 ? 
             (   scope.centralCard.dragHandler.enable(),
@@ -153,15 +140,12 @@ function PostLoad()
 
     scope.apiProvider.on("okey_tile_discarded", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
-        if ("object" == typeof e.detail.tile) {
-            var c = new scope.Card({
-                color: scope.CARD_COLORS[e.detail.tile[1] - 1],
-                value: e.detail.tile[2]
-            });
-            c.log();
-        }
-        e.detail.player == scope.user && scope.deck.remove(e.detail.tile),
-        scope.playersRightHandsMap[e.detail.player].discard(e.detail.tile);
+        var player = dec(e.raw).value[0][3][0].value[0][1].value;
+        var tile = dec(e.raw).value[0][3][1].value[0][1].value[0];
+        if (null != tile.length)
+            new scope.Card({color:scope.CARD_COLORS[tile[1]-1],value:tile[2]});
+        player == scope.user && scope.deck.remove(tile),
+        scope.playersRightHandsMap[player].discard(tile);
     });
 
     var $pile = $("#Center-Cards"),
@@ -171,18 +155,21 @@ function PostLoad()
 
     scope.apiProvider.on("okey_tile_taken", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
-        if ("object" == typeof e.detail.revealed) {
-            var c = new scope.Card({
-                color: scope.CARD_COLORS[e.detail.revealed[1] - 1],
-                value: e.detail.revealed[2]
-            });
-            c.log();
+
+        var player = dec(e.raw).value[0][3][0].value[0][1].value;
+        var pile = dec(e.raw).value[0][3][1].value[0][1];
+        var revealed = dec(e.raw).value[0][3][2].value[0][1].value;
+        var pile_heigh = dec(e.raw).value[0][3][3].value[0][1];
+
+        if (revealed != "null") {
+            revealed = revealed[0];
+            new scope.Card({color:scope.CARD_COLORS[revealed[1]-1],value:revealed[2]});
         }
 
-        if (e.detail.pile && !scope.deck.justTaken && scope.playersLeftHandsMap[e.detail.player].take(), 
-            0 === e.detail.pile && e.detail.player == scope.user && (scope.centralCard.color = scope.CARD_COLORS[e.detail.revealed[1] - 1], 
-            scope.centralCard.value = e.detail.revealed[2], scope.centralCard.render(), createCentralCard()), 
-            0 === e.detail.pile)
+        if (pile && !scope.deck.justTaken && scope.playersLeftHandsMap[player].take(), 
+            0 === pile && player == scope.user && (scope.centralCard.color = scope.CARD_COLORS[revealed[1]-1], 
+            scope.centralCard.value = revealed[2], scope.centralCard.render(), createCentralCard()), 
+            0 === pile)
         {
 
             var $topCard = $pile.find("g");
@@ -193,11 +180,13 @@ function PostLoad()
             }
         }
 
-        if(e.detail.player == scope.user){
+        if(player == scope.user){
             // scope.Draggable.revert()
-            scope.deck.insert(e.detail.revealed)
+            scope.deck.insert(revealed)
         }
-        scope.centralCard.dragHandler.disable()
+
+        scope.centralCard.dragHandler.disable();
+
         scope.centralCard.$el
             .off(document.createTouch ? 'touchstart' : 'mousedown', fadeIn)
             .off(document.createTouch ? 'touchend' : 'mouseup', fadeOut)
@@ -214,39 +203,33 @@ function PostLoad()
         var e = {detail: x.detail.json, raw: x.detail.bert};
         showRevealHand(dec(e.raw));
 //        scope.ended = !0;//, scope.deck.fill([]);
-        for (var hand in scope.playersLeftHandsMap) scope.playersLeftHandsMap[hand].clear();
-        for (var playerName in scope.playersMap) scope.playersMap[playerName].unselect();
         // $gosterme.remove();
     });
 
     scope.apiProvider.on("okey_round_ended", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
         showRoundEnd(e);
-        /*
-        var reason = dec(e.raw).value[0][3][1].value[0][1].value;
-        var gameres = dec(e.raw).value[0][3][2].value[0][1];
-        $("#Overlay-Results").empty();
-        for (var i=0;i<gameres.length;i++) { gameresultRow(400,130,i,gameres); }
-        if (reason == "tashes_out") {
-            $("#Overlay-Text").text("Tashes out");
-            $("#RevealDeckRoot").hide();
-        }
-        */
+        for (var hand in scope.playersLeftHandsMap) scope.playersLeftHandsMap[hand].clear();
+        for (var playerName in scope.playersMap) scope.playersMap[playerName].unselect();
         scope.ended = !0;
     });
 
     scope.apiProvider.on("player_left", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
-        var playerInfo = e.detail.replacement.PlayerInfo;
-        scope.playersMap[playerInfo[0]] = new scope.Player({
-            position: scope.playersMap[e.detail.player].position,
-            name: [ playerInfo[2], playerInfo[3] ].join(" "),
+        var player = dec(e.raw).value[0][3][0].value[0][1].value;
+        var playerInfo = dec(e.raw).value[0][3][2].value[0][1].value[0];
+        scope.playersMap[playerInfo[1].value] = new scope.Player({
+            position: scope.playersMap[player].position,
+            name: [ playerInfo[3].value, playerInfo[4].value ].join(" "),
             noSkin: !0
         }),
 
-        delete scope.playersMap[e.detail.player], scope.playersRightHandsMap[playerInfo[0]] = scope.playersRightHandsMap[e.detail.player], 
-        delete scope.playersRightHandsMap[e.detail.player], scope.playersLeftHandsMap[playerInfo[0]] = scope.playersLeftHandsMap[e.detail.player], 
-        delete scope.playersLeftHandsMap[e.detail.player];
+        delete scope.playersMap[player];
+        scope.playersRightHandsMap[playerInfo[1].value] = scope.playersRightHandsMap[player];
+        delete scope.playersRightHandsMap[player];
+        scope.playersLeftHandsMap[playerInfo[1].value] = scope.playersLeftHandsMap[player];
+        delete scope.playersLeftHandsMap[player];
+
     });
 
     $("#Pause").on("click", function sendPause() { scope.apiProvider.pause(false); });
@@ -267,13 +250,16 @@ function PostLoad()
         $("#Overlay-Results").empty();
         $("#RevealDeckRoot").hide();
         for (var player in scope.playersMap) scope.playersMap[player].timer.pause();
-        var player = scope.playersMap[e.detail[3]];
+        var player = scope.playersMap[e.who];
         $("#Overlay-Text").text(player.name + " paused the game");
     }
 
     scope.apiProvider.on("game_paused", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
-        if (whoPausedGame = e.detail[3], "pause" == e.detail[2]) pause(e); else unpause(e);
+        var who = dec(e.raw).value[0][4].value;
+        var what = dec(e.raw).value[0][3].value;
+        whoPausedGame = who;
+        if ("pause" == what) pause({who:who}); else unpause({});
     });
 
 
@@ -289,47 +275,72 @@ function PostLoad()
         }
     });
 
-
-function initOkeyScene(x)
+function freshGame(x)
 {
+    var e = {detail: x.detail.json, raw: x.detail.bert};
+    initOkeyScene({
+        tiles: dec(e.raw).value[0][3][0].value[0][1],
+        gosterme: dec(e.raw).value[0][3][1].value[0][1].value,
+        cur_round: dec(e.raw).value[0][3][3].value[0][1]
+    });
+
+}
 
+function inGameJoined(x)
+{
     var e = {detail: x.detail.json, raw: x.detail.bert};
+    initOkeyScene({
+        whos_move: dec(e.raw).value[0][3][0].value[0][1].value,
+        piles: dec(e.raw).value[0][3][2].value[0][1],
+        tiles: dec(e.raw).value[0][3][3].value[0][1],
+        gosterme: dec(e.raw).value[0][3][4].value[0][1].value,
+        cur_round: dec(e.raw).value[0][3][6].value[0][1],
+        next_turn_in: dec(e.raw).value[0][3][8].value[0][1],
+        paused: dec(e.raw).value[0][3][9].value[0][1].value
+    });
+
+}
+
+function initOkeyScene(x)
+{
+    if (x.gosterme && "null" != x.gosterme) x.gosterme = x.gosterme[0];
 
     if (scope.ended = !1, 
-        scope.deck.fill(e.detail.tiles),
+        scope.deck.fill(x.tiles),
         scope.deck.render(),
         scope.centralCard.dragHandler.disable(),
         scope.centralCard.$el
             .off(document.createTouch ? "touchstart" : "mousedown", fadeIn)
             .off(document.createTouch ? "touchend"   : "mouseup",   fadeOut), 
-        e.detail.gosterge && "null" != e.detail.gosterge)
+        x.gosterme && "null" != x.gosterme)
     {
-        var gosterme = new scope.Card({
-            color: scope.CARD_COLORS[e.detail.gosterge[1] - 1],
-            value: e.detail.gosterge[2]
-        });
+        var gosterme = new scope.Card({color:scope.CARD_COLORS[x.gosterme[1]-1],value:x.gosterme[2]});
         gosterme.$el.attr({transform: "translate(16,-60)"}),
         $gosterme.append(gosterme.$el);
     }
 
-    var piles = e.detail.piles;
-
-    if (piles && "null" != piles) for (var i = 0; i < piles.length; i++)
+    if (null != x.piles && null != x.piles.length) for (var i = 0; i < x.piles.length; i++)
     {
-        var pile = piles[i];
-        for (var name in pile) 
-            for (var playerPile = pile[name],
-                     hand = scope.playersLeftHandsMap[name],
-                     j = playerPile.length; j--; ) hand.discard(playerPile[j]);
+        var pile = x.piles[i];
+        var name = pile.value[0][0].value;
+        var playerPiles = pile.value[0][1];
+        var hand = scope.playersLeftHandsMap[name];
+        for (var j=0;j<playerPiles.length;j++)
+        {
+            hand.discard(playerPiles[j].value[0]);
+        }
     }
 
-    scope.paused = e.detail.paused;
+    if (null != x.whos_move    && "null" != x.whos_move &&
+        null != x.next_turn_in && "null" != x.next_turn_in)
+    {
+         scope.playersMap[x.whos_move].timer.from(x.next_turn_in);
+         if (x.paused) { scope.playersMap[x.whos_move].timer.pause(); $overlay.show() } else unpause();
+         scope.playersMap[x.whos_move].select();
+    };
+
+    scope.paused = x.paused;
 
-    e.detail.whos_move && "null" != e.detail.whos_move && 
-        (e.detail.next_turn_in && "null" != e.detail.next_turn_in && 
-         scope.playersMap[e.detail.whos_move].timer.from(e.detail.next_turn_in),
-         e.detail.paused && (scope.playersMap[e.detail.whos_move].timer.pause(),$overlay.show()),
-         scope.playersMap[e.detail.whos_move].select());
 }
 
 function SetupLeftMenu() 

+ 7 - 42
apps/web/priv/static/app/js/okey/okey_protocol.js

@@ -71,54 +71,19 @@ function OkeyApiProviderScope(scope) {
         handleMessage: function(e) {
             var msg = JSON.parse(e.data);
             if (msg.eval) { try{eval(msg.eval)}catch(ex){console.log(ex);} }
-            if (msg.data) { this.emitEvent(msg.data,this.beutify(this.parse(dec(msg.data)))); }
+            if (msg.data) { this.emitEvent(msg.data); }
         },
 
-        // TODO: remove parse/beautify or make it proper BERT to JSON transformation
+        emitEvent: function(raw) {
+            var msgName = dec(raw).value[0][0].value;
+            if (msgName == "game_event") msgName = dec(raw).value[0][2].value;
 
-        parse: function(msg) {
-            if (Array.isArray(msg)) {
-                if (msg.every(function(el, i) {
-                    return i % 2 == 0 || Object(el.value) === el.value;
-                }) || msg.length % 2 != 0) {
-                    for (var result = [], i = 0, l = msg.length; l > i; i++) result.push(this.parse(msg[i]));
-                    return result;
-                }
-                if (msg.length > 2 && msg.every(function(el) {
-                    return null != el && "object" != typeof el || null != el.value && "object" != typeof el.value;
-                })) {
-                    var result = {};
-                    return result[this.parse(msg[0])] = this.parse(msg.slice(1)), result;
-                }
-                for (var result = {}, i = 0, l = msg.length; l > i; i += 2) {
-                    {
-                        this.parse(msg[i]);
-                    }
-                    result[this.parse(msg[i])] = this.parse(msg[i + 1]);
-                }
-                return result;
-            }
-            return msg.value && Object(msg.value) === msg.value && msg.value[0] && msg.value.length ? this.parse(msg.value[0]) : null != msg.value ? msg.value : msg;
-        },
-        beutify: function(msg) {
-            var result = {};
-            for (var prop in msg) {
-                var tempObj = msg[prop];
-                if (Array.isArray(tempObj)) {
-                    for (var obj, i = tempObj.length; i--; ) if (obj = tempObj[i], Array.isArray(obj)) result[obj[0]] = obj[1]; else if (Object(obj) === obj) for (var p in obj) result[p] = obj[p]; else result[i] = obj;
-                    msg[prop] = result;
-                }
-            }
-            return msg;
-        },
-        emitEvent: function(raw,msg) {
-            console.log(String(dec(raw)));
             for (var event, i = eventMap.length, obj; i--; ) {
                 event = eventMap[i];
-                found = (event == msg[0] || msg[event] != null);
-                body = event == msg[0] ? msg : msg[event];
-                found && this.$socket.trigger(event, {detail: {json:body,bert:raw} });
+                if (eventMap[i] == msgName)
+                    this.$socket.trigger(msgName, {detail: {json:{},bert:raw} });
             }
+
         },
         actionTake: function(card) {
             var from = null != card.value ? 1 : 0;

+ 7 - 2
apps/web/priv/static/app/js/roster.js

@@ -9,7 +9,8 @@ function RosterHandlers(scope) {
 
     scope.apiProvider.on("online_number", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
-        document.getElementById("Users-Online-Number").firstElementChild.textContent = e.detail.toString(); 
+        var number  = dec(e.raw).value[0][1];
+        document.getElementById("Users-Online-Number").firstElementChild.textContent = number; 
     });
 
     scope.apiProvider.on("online", function (x) {
@@ -20,6 +21,8 @@ function RosterHandlers(scope) {
             score   = dec(e.raw).value[0][4];
         if (null != document.getElementById(id)) removeOnlineUser(id);
         addOnlineUser(id,name+" "+surname,score,"insertTop");
+        if ( name == document.names)
+            $("#Quota")[0].lastElementChild.textContent = i18n("Score") + ": " + score;
         if (currentChat == null) showOnlineList();
     });
 
@@ -82,6 +85,7 @@ function RosterHandlers(scope) {
 
     scope.apiProvider.on("stats_event", function (x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
+      displayPlayerInfo(function() {
         document.getElementById('Player-Statistics').style.display = '';
         var games    = dec(e.raw).value[0][2],
             reveals  = dec(e.raw).value[0][3],
@@ -92,7 +96,8 @@ function RosterHandlers(scope) {
 //            for (var i=0;i<games.length;i++) { statsRow(4, i,games); }
         for (var i=0;i<protocol.length;i++) { statsRow(4,180,i,protocol); }
         for (var i=0;i<reveals.length;i++) { statsRow(320,180,i,reveals); }
-        $("#Score").text("Score: " + score).attr({y: 40});
+        $("#Score").text(i18n("Score") + ": " + score).attr({y: 40});
+      });
     });
 
     scope.apiProvider.on("roster_group", function (x) {

+ 0 - 2
apps/web/priv/static/app/js/tavla/tavla.js

@@ -1,4 +1,2 @@
 
 function StartApp() { $.load(scope.CARD_SOURCE, PostLoad); }
-
-

+ 3 - 5
apps/web/priv/static/app/svg/Okey-Rules.svg

@@ -24,11 +24,6 @@
                     <tspan x="0" y="29">Winning Deck 3x3+1x5</tspan>
                 </text>
             </g>
-            <g id="Group" transform="translate(32.000000, 17.000000)" font-size="29.3024001" font-family="Exo 2" fill="#FFFFFF" sketch:type="MSTextLayer" font-weight="normal">
-                <text id="Okey-Rules">
-                    <tspan x="0" y="28.5284512">Okey Rules</tspan>
-                </text>
-            </g>
             <g id="Small-Deck" transform="translate(121.000000, 132.000000)">
                 <g id="Deck" sketch:type="MSShapeGroup">
                     <rect id="Rectangle-path" fill="#AF7B58" x="0" y="2" width="495" height="42.4489796"></rect>
@@ -262,6 +257,9 @@
                     <tspan x="45" y="31">Okey Joker</tspan>
                 </text>
             </g>
+            <text id="Okey-Rules-Text" sketch:type="MSTextLayer" font-family="Exo 2" font-size="35" font-weight="bold" fill="#FFFFFF">
+                <tspan x="32" y="45.5284512">Okey Rules</tspan>
+            </text>
         </g>
     </g>
 </svg>

BIN
apps/web/priv/static/doc/Kakaranet-Scene.sketch/Data


+ 1 - 1
apps/web/priv/static/doc/Kakaranet-Scene.sketch/metadata

@@ -16,7 +16,7 @@
 		<string>ZapfDingbatsITC</string>
 	</array>
 	<key>length</key>
-	<integer>2881757</integer>
+	<integer>2881045</integer>
 	<key>version</key>
 	<integer>37</integer>
 </dict>