Selaa lähdekoodia

[add] tmp move cursor on input

isundil 8 vuotta sitten
vanhempi
commit
acd035a75e
3 muutettua tiedostoa jossa 99 lisäystä ja 36 poistoa
  1. 66 10
      js/uiGrid.js
  2. 17 11
      js/workflow.js
  3. 16 15
      public/crosswords.min.js

+ 66 - 10
js/uiGrid.js

@@ -1,5 +1,6 @@
 
-var UI_CELLS = [];
+var UI_CELLS = []
+    ,SELECTED_INDEX = null;
 
 function uiCreateCell(cellData, x, y) {
     var cell = dCreate("div");
@@ -107,6 +108,35 @@ function moveInput(cell) {
     input.focus();
 }
 
+function getUiCell(x, y) {
+    return UI_CELLS[x +y *GRID.width];
+}
+
+function isWordComplete(coordinates) {
+    for (var i =0, nbCoords = coordinates.length; i < nbCoords; i++)
+        if (!getUiCell(coordinates[i][0], coordinates[i][1]).data.complete)
+            return false;
+    return true;
+}
+
+function inputCell(x, y) {
+    if (CURRENTINPUT)
+        CURRENTINPUT.dom.classList.remove(R.klass.cell.currentInput);
+    CURRENTINPUT = getUiCell(x, y);
+    CURRENTINPUT.dom.classList.add(R.klass.cell.currentInput);
+    moveInput(CURRENTINPUT);
+}
+
+function uiSelectWritableCell(direction) {
+    for (var i = SELECTED_INDEX +direction, nbCoords = SELECTED.length; i < nbCoords && i >= 0; i += direction) {
+        if (!getUiCell(SELECTED[i].x, SELECTED[i].y).data.found) {
+            inputCell(SELECTED[i].x, SELECTED[i].y);
+            SELECTED_INDEX = i;
+            return;
+        }
+    }
+}
+
 function gridClickDelegate(e) {
     var target = e.target;
     while (target && (target.dataset && !target.dataset.x))
@@ -120,25 +150,51 @@ function gridClickDelegate(e) {
                 var first = true;
                 unselect();
                 if (clickedCell.data.definitions[target.dataset.definition]) {
+                    var i =0;
                     clickedCell.data.definitions[target.dataset.definition].word.forEach(function(coordinates) {
                         select(coordinates[0], coordinates[1]);
-                        if (first && !UI_CELLS[coordinates[0] +coordinates[1] *GRID.width].data.found) {
-                            CURRENTINPUT = UI_CELLS[coordinates[0] +coordinates[1] *GRID.width];
-                            CURRENTINPUT.dom.classList.add(R.klass.cell.currentInput);
+                        if (first && !getUiCell(coordinates[0], coordinates[1]).data.found) {
+                            SELECTED_INDEX = i;
+                            inputCell(coordinates[0], coordinates[1]);
                         }
                         first = false;
+                        i++;
                     });
                 }
             } else {
                 var words = GRID.getWord(clickedCell.x, clickedCell.y);
+
                 unselect();
-                words.forEach(function (word) {
-                    word.forEach(function (coordinates) {
+                // If we have a direction not complete starting with clickedCell
+                for (var i =0, nbWord = words.length; i < nbWord; i++) {
+                    for (var coordIndex =0, nbCoords = words[i].length; coordIndex < nbCoords; coordIndex++) {
+                        if (getUiCell(words[i][coordIndex][0], words[i][coordIndex][1]).data.found)
+                            continue;
+                        if (words[i][coordIndex][0] == clickedCell.x && words[i][coordIndex][1] == clickedCell.y) {
+                            words[i].forEach(function (coordinates) {
+                                select(coordinates[0], coordinates[1]);
+                            });
+                            SELECTED_INDEX = coordIndex;
+                            inputCell(clickedCell.x, clickedCell.y);
+                            return;
+                        }
+                        break;
+                    }
+                }
+                var index = 0;
+                // We don't have a direction starting with clickedCell, try to find a new one
+                for (var i =0, nbWords = words.length; i < nbWords; i++) {
+                    if (isWordComplete(words[i]))
+                        continue;
+                    for (var j =0, nbCoords = words[0].length; j < nbCoords; j++) {
+                        var coordinates = words[0][j];
                         select(coordinates[0], coordinates[1]);
-                    });
-                });
-                target.classList.add(R.klass.cell.currentInput);
-                CURRENTINPUT = clickedCell;
+                        if (coordinates[0] == clickedCell.x && coordinates[1] == clickedCell.y)
+                            SELECTED_INDEX = index;
+                    }
+                    target.classList.add(R.klass.cell.currentInput);
+                    inputCell(clickedCell.x, clickedCell.y);
+                }
             }
             // Display mobile / tablet keyboard
             moveInput(CURRENTINPUT);

+ 17 - 11
js/workflow.js

@@ -31,6 +31,7 @@ function keyPressHandler(cell, key) {
 
         } else if (status === 204) {
             pollNow();
+            uiSelectWritableCell(1);
 
         } else {
             // out of sync ?
@@ -80,24 +81,29 @@ document.addEventListener('DOMContentLoaded', function() {
     }
 
     document.addEventListener('click', gridClickDelegate);
-    document.addEventListener('keypress', function(e) {
+    document.addEventListener('keydown', function(e) {
+        if (e.key.toUpperCase() === 'BACKSPACE') {
+            e.preventDefault();
+        }
+    });
+    document.addEventListener('keyup', function(e) {
         if (CURRENTINPUT && !CURRENTINPUT.data.found) {
-            if (e.key.length === 1) {
-                var key = e.key.charAt(0).toUpperCase();
-                if (key.match(/[A-Z]/)) {
-                    CURRENTINPUT.data.letter = key;
-                    keyPressHandler(CURRENTINPUT, key);
-                    onGridUpdated();
-                }
-            } else if (e.key.toUpperCase() == "DELETE") {
+            if (e.key.toUpperCase() == "DELETE") {
                 CURRENTINPUT.dom.classList.remove(R.klass.cell.wrong);
                 CURRENTINPUT.data.letter = null;
                 onGridUpdated();
-            } else if (e.key.toUpperCase() == "BACKSPACE") { // TODO catch
+            } else if (e.key.toUpperCase() == "BACKSPACE") {
                 CURRENTINPUT.dom.classList.remove(R.klass.cell.wrong);
                 CURRENTINPUT.data.letter = null;
-                //TODO go back
+                uiSelectWritableCell(-1);
                 onGridUpdated();
+            } else if (e.key.length === 1) {
+                var key = e.key.charAt(0).toUpperCase();
+                if (key.match(/[A-Z]/)) {
+                    CURRENTINPUT.data.letter = key;
+                    keyPressHandler(CURRENTINPUT, key);
+                    onGridUpdated();
+                }
             }
         }
         console.log(e);

+ 16 - 15
public/crosswords.min.js

@@ -1,15 +1,16 @@
-var e={};function h(a){var b=document.createElement("li"),c=document.createElement("span");c.className="player-name";c.textContent=a.name;b.appendChild(c);b.i=document.createElement("span");b.i.className="player-score";b.appendChild(b.i);b.style.color=a.color;return b}
-function k(){var a,b=[],c;for(c in l.g){var d=e[c];d||(d=e[c]=h(l.g[c]),c===l.j.id&&d.classList.add("player-self"),a||(a=document.getElementById("scoreboardPlayers")),a.appendChild(d));d.i.textContent=l.g[c].i;b.push(c)}b.sort(function(a,b){return l.g[b].i-l.g[a].i});c=0;for(a=b.length;c<a;c++)e[b[c]].style.order=c}
-setInterval(function(){if(l){var a=(Date.now()-l.D)/1E3,b=Math.floor(a%60),a=(a-b)/60,c=Math.floor(a%60),a=Math.floor((a-c)/60),a=(a?a+":":"")+((10>c?"0":"")+c+":")+((10>b?"0":"")+b);document.getElementById("gridTime").textContent=a}},1E3);var m=[];function p(a,b,c){var d=document.createElement("div");d.className="cell";if(a.o)d.classList.add("cell-disabled");else if(null!==a.f){d.classList.add("cell-definition");for(var f=document.createElement("span"),g=0,G=a.f.length;g<G;g++){var H=a.f[g],n=document.createElement("span");n.dataset.x=b;n.dataset.y=c;n.dataset.definition=g;n.className="definition";n.innerHTML=H.text.join("<br/>");f.appendChild(n)}d.appendChild(f)}else d.classList.add("cell-letter");return d}
-function q(){var a=document.createDocumentFragment();document.getElementById("gridTitle").textContent=l.F;document.getElementById("gridDifficulty").textContent=l.G;for(var b=0;b<l.s;b++){var c=document.createElement("div");c.className="crossword-line";a.appendChild(c);for(var d=0;d<l.b;d++){var f=p(l.c[d][b],d,b);f.dataset.x=d;f.dataset.y=b;c.appendChild(f);m.push({x:d,y:b,a:f,data:l.c[d][b]})}}for(b=0;b<l.s;b++)for(d=0;d<l.b;d++)f=m[b*l.b+d],f.data.f&&f.data.f.forEach(function(a){switch(a.direction){case 2:m[b*
-l.b+d+1].a.classList.add("definition-right-vt");break;case 1:m[b*l.b+d+1].a.classList.add("definition-right-hz");break;case 4:m[(b+1)*l.b+d].a.classList.add("definition-bottom-vt");break;case 3:m[(b+1)*l.b+d].a.classList.add("definition-bottom-hz")}});r();c=document.getElementById("grid");c.textContent="";c.appendChild(a)}
-function r(){m.forEach(function(a){a.data.f||a.data.o||(a.data.m?(a.a.textContent=a.data.m,a.data.l&&(a.a.classList.add("cell-letter-correct"),a.a.classList.remove("cell-letter-wrong"),a.a.style.color=a.data.l.color)):a.a.textContent="")})}function t(){var a=u,b=document.getElementById("input");b.style.top=a.a.offsetTop+"px";b.style.left=a.a.offsetLeft+"px";b.focus()}
-function v(a){for(a=a.target;a&&a.dataset&&!a.dataset.x;)a=a.parentElement;if(a&&a.dataset&&a.dataset.x&&a.dataset.y){var b=m[parseInt(a.dataset.x,10)+parseInt(a.dataset.y,10)*l.b];if(b.data.o)w();else{if(b.data.f){var c=!0;w();b.data.f[a.dataset.definition]&&b.data.f[a.dataset.definition].B.forEach(function(a){x(a[0],a[1]);c&&!m[a[0]+a[1]*l.b].data.l&&(u=m[a[0]+a[1]*l.b],u.a.classList.add("cell-input"));c=!1})}else{var d=y(b.x,b.y);w();d.forEach(function(a){a.forEach(function(a){x(a[0],a[1])})});
-a.classList.add("cell-input");u=b}t()}}};function z(a){this.text=a.text;this.direction=a.pos;this.B=null}function A(){this.o=!1;this.m=this.l=this.f=null}A.prototype.update=function(a,b){if(null===a.type)this.o=!0;else if(void 0!==a.definitions)this.f=[],a.definitions.forEach(function(a){this.f.push(new z(a))}.bind(this));else if(a.letter)return this.m=a.letter,this.l=b[a.found],a.v;return 0};
-function B(a,b){this.F=a.title||"";this.G=a.difficulty;this.b=a.w;this.s=a.h;this.D=a.startTime||0;this.g={};this.j=null;this.u=b;this.A=[];this.c=[];for(var c=0;c<this.b;c++){this.c[c]=[];for(var d=0;d<this.s;d++)this.c[c][d]=new A}}function C(a,b,c,d,f){if(!a.c[b+d]||!a.c[b+d][c+f]||a.c[b+d][c+f].f||a.c[b+d][c+f].o)return[[b,c]];a=C(a,b+d,c+f,d,f);a.unshift([b,c]);return a}
-function y(a,b){var c=[];l.A.forEach(function(d){for(var f=0,g=d.length;f<g;f++)if(d[f][0]==a&&d[f][1]==b){c.push(d);break}});return c}function D(a){var b=0;a.forEach(function(a){var c=this.g[a.name];c||(c=this.g[a.name]=new E(a));b=Math.max(b,c.update(a))}.bind(l))}
-B.prototype.update=function(a){var b=null,c=!1;a.forEach(function(a){a=this.c[a.x][a.y].update(a,this.g);b=Math.max(b||0,a);0===a&&(c=!0)}.bind(this));if(c){for(var d=[],f=0;f<this.b;f++)for(var g=0;g<this.s;g++)this.c[f][g].f&&this.c[f][g].f.forEach(function(a){var b;switch(a.direction){case 2:b=C(this,f+1,g,0,1);break;case 1:b=C(this,f+1,g,1,0);break;case 4:b=C(this,f,g+1,0,1);break;case 3:b=C(this,f,g+1,1,0)}d.push(b);a.B=b}.bind(this));this.A=d}return b};function E(a){this.id=a.name;this.C=encodeURIComponent(a.name);this.i=a.score;var b=a.name.indexOf("|");this.name=a.name.substr(0,b);this.color="#"+a.name.substr(b+1)}E.prototype.update=function(a){this.i=a.score;return a.v};function F(a,b){var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===c.readyState){var a=null;if(200===c.status){a=c.response;try{a=JSON.parse(a)}catch(f){a=null}}b(c.status,a)}};c.open("GET",a,!0);c.send(null)}function I(){J(function(a){a&&F("/api/poll?grid="+K+"&v="+L,function(b,c){c&&(l=new B(c,a),c.players&&(D(c.players),l.j||(l.j=l.g[l.u]),k()),c.grid&&(l.update(c.grid),q()),L=Math.max(L,c.v||0),M())})})}
-function N(){!0!==N.c&&(N.b&&(clearTimeout(N.b),N.b=0),N.c=!0,F("/api/poll?grid="+K+"&v="+L,function(a,b){N.c=!1;b&&(b.players&&(D(b.players),l.j||(l.j=l.g[l.u]),k()),b.grid&&(l.update(b.grid),r()),L=Math.max(L,b.v||0));M()}))}function M(){N.b||(N.b=setInterval(N,5E3))};var K,L=0,l,O=[],u=null;function J(a){var b=window.sessionStorage.getItem("pseudonyme_"+K);b?a(b):F("/api/register?grid="+K,function(b,d){b&&d?(window.sessionStorage.setItem("pseudonyme_"+K,d),a(d)):a(null)})}function P(a){var b=u;b.a.classList.add("cell-letter-pending");F("/api/put?grid="+K+"&key="+a+"&x="+b.x+"&y="+b.y+"&me="+l.j.C,function(a){b.a.classList.remove("cell-letter-pending");403!==a||b.data.l?N():b.a.classList.add("cell-letter-wrong")})}
-function w(){O.forEach(function(a){a.a.classList.remove("cell-selected")});u&&(u.a.classList.remove("cell-input"),u=null);O=[]}function x(a,b){var c=m[a+b*l.b];O.push(c);c.a.classList.add("cell-selected")}
-document.addEventListener("DOMContentLoaded",function(){K=document.location.hash.substr(1);""==K?document.location.href="/":(document.addEventListener("click",v),document.addEventListener("keypress",function(a){if(u&&!u.data.l)if(1===a.key.length){var b=a.key.charAt(0).toUpperCase();b.match(/[A-Z]/)&&(u.data.m=b,P(b),r())}else"DELETE"==a.key.toUpperCase()?(u.a.classList.remove("cell-letter-wrong"),u.data.m=null,r()):"BACKSPACE"==a.key.toUpperCase()&&(u.a.classList.remove("cell-letter-wrong"),u.data.m=
-null,r());console.log(a)}),I())});
+var f={};function h(a){var b=document.createElement("li"),c=document.createElement("span");c.className="player-name";c.textContent=a.name;b.appendChild(c);b.j=document.createElement("span");b.j.className="player-score";b.appendChild(b.j);b.style.color=a.color;return b}
+function k(){var a,b=[],c;for(c in n.g){var d=f[c];d||(d=f[c]=h(n.g[c]),c===n.l.id&&d.classList.add("player-self"),a||(a=document.getElementById("scoreboardPlayers")),a.appendChild(d));d.j.textContent=n.g[c].j;b.push(c)}b.sort(function(a,b){return n.g[b].j-n.g[a].j});c=0;for(a=b.length;c<a;c++)f[b[c]].style.order=c}
+setInterval(function(){if(n){var a=(Date.now()-n.D)/1E3,b=Math.floor(a%60),a=(a-b)/60,c=Math.floor(a%60),a=Math.floor((a-c)/60),a=(a?a+":":"")+((10>c?"0":"")+c+":")+((10>b?"0":"")+b);document.getElementById("gridTime").textContent=a}},1E3);var p=[],q=null;function r(a,b,c){var d=document.createElement("div");d.className="cell";if(a.o)d.classList.add("cell-disabled");else if(null!==a.f){d.classList.add("cell-definition");for(var e=document.createElement("span"),g=0,l=a.f.length;g<l;g++){var u=a.f[g],m=document.createElement("span");m.dataset.x=b;m.dataset.y=c;m.dataset.definition=g;m.className="definition";m.innerHTML=u.text.join("<br/>");e.appendChild(m)}d.appendChild(e)}else d.classList.add("cell-letter");return d}
+function t(){var a=document.createDocumentFragment();document.getElementById("gridTitle").textContent=n.F;document.getElementById("gridDifficulty").textContent=n.G;for(var b=0;b<n.s;b++){var c=document.createElement("div");c.className="crossword-line";a.appendChild(c);for(var d=0;d<n.a;d++){var e=r(n.c[d][b],d,b);e.dataset.x=d;e.dataset.y=b;c.appendChild(e);p.push({x:d,y:b,b:e,data:n.c[d][b]})}}for(b=0;b<n.s;b++)for(d=0;d<n.a;d++)e=p[b*n.a+d],e.data.f&&e.data.f.forEach(function(a){switch(a.direction){case 2:p[b*
+n.a+d+1].b.classList.add("definition-right-vt");break;case 1:p[b*n.a+d+1].b.classList.add("definition-right-hz");break;case 4:p[(b+1)*n.a+d].b.classList.add("definition-bottom-vt");break;case 3:p[(b+1)*n.a+d].b.classList.add("definition-bottom-hz")}});v();c=document.getElementById("grid");c.textContent="";c.appendChild(a)}
+function v(){p.forEach(function(a){a.data.f||a.data.o||(a.data.m?(a.b.textContent=a.data.m,a.data.i&&(a.b.classList.add("cell-letter-correct"),a.b.classList.remove("cell-letter-wrong"),a.b.style.color=a.data.i.color)):a.b.textContent="")})}function w(){var a=x,b=document.getElementById("input");b.style.top=a.b.offsetTop+"px";b.style.left=a.b.offsetLeft+"px";b.focus()}function y(a){for(var b=0,c=a.length;b<c;b++)if(!p[a[b][0]+a[b][1]*n.a].data.complete)return!1;return!0}
+function z(a,b){x&&x.b.classList.remove("cell-input");x=p[a+b*n.a];x.b.classList.add("cell-input");w()}function A(a){for(var b=q+a,c=B.length;b<c&&0<=b;b+=a)if(!p[B[b].x+B[b].y*n.a].data.i){z(B[b].x,B[b].y);q=b;break}}
+function C(a){for(a=a.target;a&&a.dataset&&!a.dataset.x;)a=a.parentElement;if(a&&a.dataset&&a.dataset.x&&a.dataset.y){var b=p[parseInt(a.dataset.x,10)+parseInt(a.dataset.y,10)*n.a];if(b.data.o)D();else{if(b.data.f){var c=!0;D();if(b.data.f[a.dataset.definition]){var d=0;b.data.f[a.dataset.definition].B.forEach(function(a){E(a[0],a[1]);c&&!p[a[0]+a[1]*n.a].data.i&&(q=d,z(a[0],a[1]));c=!1;d++})}}else{var e=F(b.x,b.y);D();for(var d=0,g=e.length;d<g;d++)for(var l=0,u=e[d].length;l<u;l++)if(!p[e[d][l][0]+
+e[d][l][1]*n.a].data.i){if(e[d][l][0]==b.x&&e[d][l][1]==b.y){e[d].forEach(function(a){E(a[0],a[1])});q=l;z(b.x,b.y);return}break}d=0;for(g=e.length;d<g;d++)if(!y(e[d])){l=0;for(u=e[0].length;l<u;l++){var m=e[0][l];E(m[0],m[1]);m[0]==b.x&&m[1]==b.y&&(q=0)}a.classList.add("cell-input");z(b.x,b.y)}}w()}}};function G(a){this.text=a.text;this.direction=a.pos;this.B=null}function H(){this.o=!1;this.m=this.i=this.f=null}H.prototype.update=function(a,b){if(null===a.type)this.o=!0;else if(void 0!==a.definitions)this.f=[],a.definitions.forEach(function(a){this.f.push(new G(a))}.bind(this));else if(a.letter)return this.m=a.letter,this.i=b[a.found],a.v;return 0};
+function I(a,b){this.F=a.title||"";this.G=a.difficulty;this.a=a.w;this.s=a.h;this.D=a.startTime||0;this.g={};this.l=null;this.u=b;this.A=[];this.c=[];for(var c=0;c<this.a;c++){this.c[c]=[];for(var d=0;d<this.s;d++)this.c[c][d]=new H}}function J(a,b,c,d,e){if(!a.c[b+d]||!a.c[b+d][c+e]||a.c[b+d][c+e].f||a.c[b+d][c+e].o)return[[b,c]];a=J(a,b+d,c+e,d,e);a.unshift([b,c]);return a}
+function F(a,b){var c=[];n.A.forEach(function(d){for(var e=0,g=d.length;e<g;e++)if(d[e][0]==a&&d[e][1]==b){c.push(d);break}});return c}function K(a){var b=0;a.forEach(function(a){var c=this.g[a.name];c||(c=this.g[a.name]=new L(a));b=Math.max(b,c.update(a))}.bind(n))}
+I.prototype.update=function(a){var b=null,c=!1;a.forEach(function(a){a=this.c[a.x][a.y].update(a,this.g);b=Math.max(b||0,a);0===a&&(c=!0)}.bind(this));if(c){for(var d=[],e=0;e<this.a;e++)for(var g=0;g<this.s;g++)this.c[e][g].f&&this.c[e][g].f.forEach(function(a){var b;switch(a.direction){case 2:b=J(this,e+1,g,0,1);break;case 1:b=J(this,e+1,g,1,0);break;case 4:b=J(this,e,g+1,0,1);break;case 3:b=J(this,e,g+1,1,0)}d.push(b);a.B=b}.bind(this));this.A=d}return b};function L(a){this.id=a.name;this.C=encodeURIComponent(a.name);this.j=a.score;var b=a.name.indexOf("|");this.name=a.name.substr(0,b);this.color="#"+a.name.substr(b+1)}L.prototype.update=function(a){this.j=a.score;return a.v};function M(a,b){var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===c.readyState){var a=null;if(200===c.status){a=c.response;try{a=JSON.parse(a)}catch(e){a=null}}b(c.status,a)}};c.open("GET",a,!0);c.send(null)}function N(){O(function(a){a&&M("/api/poll?grid="+P+"&v="+Q,function(b,c){c&&(n=new I(c,a),c.players&&(K(c.players),n.l||(n.l=n.g[n.u]),k()),c.grid&&(n.update(c.grid),t()),Q=Math.max(Q,c.v||0),R())})})}
+function S(){!0!==S.c&&(S.a&&(clearTimeout(S.a),S.a=0),S.c=!0,M("/api/poll?grid="+P+"&v="+Q,function(a,b){S.c=!1;b&&(b.players&&(K(b.players),n.l||(n.l=n.g[n.u]),k()),b.grid&&(n.update(b.grid),v()),Q=Math.max(Q,b.v||0));R()}))}function R(){S.a||(S.a=setInterval(S,5E3))};var P,Q=0,n,B=[],x=null;function O(a){var b=window.sessionStorage.getItem("pseudonyme_"+P);b?a(b):M("/api/register?grid="+P,function(b,d){b&&d?(window.sessionStorage.setItem("pseudonyme_"+P,d),a(d)):a(null)})}function T(a){var b=x;b.b.classList.add("cell-letter-pending");M("/api/put?grid="+P+"&key="+a+"&x="+b.x+"&y="+b.y+"&me="+n.l.C,function(a){b.b.classList.remove("cell-letter-pending");403!==a||b.data.i?204===a?(S(),A(1)):S():b.b.classList.add("cell-letter-wrong")})}
+function D(){B.forEach(function(a){a.b.classList.remove("cell-selected")});x&&(x.b.classList.remove("cell-input"),x=null);B=[]}function E(a,b){var c=p[a+b*n.a];B.push(c);c.b.classList.add("cell-selected")}
+document.addEventListener("DOMContentLoaded",function(){P=document.location.hash.substr(1);""==P?document.location.href="/":(document.addEventListener("click",C),document.addEventListener("keydown",function(a){"BACKSPACE"===a.key.toUpperCase()&&a.preventDefault()}),document.addEventListener("keyup",function(a){if(x&&!x.data.i)if("DELETE"==a.key.toUpperCase())x.b.classList.remove("cell-letter-wrong"),x.data.m=null,v();else if("BACKSPACE"==a.key.toUpperCase())x.b.classList.remove("cell-letter-wrong"),
+x.data.m=null,A(-1),v();else if(1===a.key.length){var b=a.key.charAt(0).toUpperCase();b.match(/[A-Z]/)&&(x.data.m=b,T(b),v())}console.log(a)}),N())});