crosswords.min.js 7.4 KB

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