crosswords.min.js 3.6 KB

1234567
  1. var f=[];function h(a){var b=document.createElement("div");b.className="cell";if(a.i)b.classList.add("cell-disabled");else if(null!==a.b){b.classList.add("cell-definition");var c=document.createElement("span");a.b.forEach(function(a){var b=document.createElement("span");b.className="definition";b.innerHTML=a.text.join("<br/>");c.appendChild(b)});b.appendChild(c)}else b.classList.add("cell-letter");return b}
  2. function k(){for(var a=document.createDocumentFragment(),b=0;b<m.g;b++){var c=document.createElement("div");c.className="crossword-line";a.appendChild(c);for(var d=0;d<m.a;d++){var e=h(m.c[d][b]);e.dataset.x=d;e.dataset.y=b;c.appendChild(e);f.push({x:d,y:b,f:e,data:m.c[d][b]})}}for(b=0;b<m.g;b++)for(d=0;d<m.a;d++)e=f[b*m.a+d],e.data.b&&e.data.b.forEach(function(a){switch(a.direction){case 2:f[b*m.a+d+1].f.classList.add("definition-right-vt");break;case 1:f[b*m.a+d+1].f.classList.add("definition-right-hz");
  3. break;case 4:f[(b+1)*m.a+d].f.classList.add("definition-bottom-vt");break;case 3:f[(b+1)*m.a+d].f.classList.add("definition-bottom-hz")}});document.body.textContent="";document.body.appendChild(a)}
  4. function n(a){for(a=a.target;a&&!a.classList.contains("cell");)a=a.parentElement;if(a&&a.dataset&&a.dataset.x&&a.dataset.y){var b=f[parseInt(a.dataset.x,10)+parseInt(a.dataset.y,10)*m.a];if(b.data.i)p();else if(b.data.b){var c=!0;p();b.data.b.length&&b.data.b[0].l.forEach(function(a){q(a[0],a[1]);c&&(r=f[a[0]+a[1]*m.a],r.f.classList.add("cell-input"),c=!1)})}else{var d=t(b.x,b.y);p();d.forEach(function(a){a.forEach(function(a){q(a[0],a[1])})});a.classList.add("cell-input");r=b}}};function u(a){this.text=a.text;this.direction=a.pos;this.l=null}function v(){this.i=!1;this.b=null}v.prototype.update=function(a){null===a.type?this.i=!0:void 0!==a.definitions&&(this.b=[],a.definitions.forEach(function(a){this.b.push(new u(a))}.bind(this)));return 0};function w(a){this.a=a.w;this.g=a.h;this.j=[];this.c=[];for(a=0;a<this.a;a++){this.c[a]=[];for(var b=0;b<this.g;b++)this.c[a][b]=new v}}
  5. function x(a,b,c,d,e){if(!a.c[b+d]||!a.c[b+d][c+e]||a.c[b+d][c+e].b||a.c[b+d][c+e].i)return[[b,c]];a=x(a,b+d,c+e,d,e);a.unshift([b,c]);return a}function t(a,b){var c=[];m.j.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}
  6. w.prototype.update=function(a){var b=null,c=this.c,d=!1;a.forEach(function(a){a=c[a.x][a.y].update(a);b=Math.max(b||0,a);0===a&&(d=!0)});if(d){for(var e=[],g=0;g<this.a;g++)for(var l=0;l<this.g;l++)c[g][l].b&&c[g][l].b.forEach(function(a){var b;switch(a.direction){case 2:b=x(this,g+1,l,0,1);break;case 1:b=x(this,g+1,l,1,0);break;case 4:b=x(this,g,l+1,0,1);break;case 3:b=x(this,g,l+1,1,0)}e.push(b);a.l=b}.bind(this));this.j=e}return b};var y,z=0,m,A=[],r=null;function B(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(a)}};c.open("GET",a,!0);c.send(null)}function C(){B("/api/poll?grid="+y+"&v="+z,function(a){a&&(m=new w(a),a.grid&&(z=Math.max(m.update(a.grid)||0,z),k()))})}function D(a){var b=r;B("/api/put?grid="+y+"&key="+a+"&x="+b.x+"&y="+b.y,function(a){console.log(a)})}
  7. function p(){A.forEach(function(a){a.f.classList.remove("cell-selected")});r&&(r.f.classList.remove("cell-input"),r=null);A=[]}function q(a,b){var c=f[a+b*m.a];A.push(c);c.f.classList.add("cell-selected")}document.addEventListener("DOMContentLoaded",function(){y=document.location.hash.substr(1);""==y?document.location.href="/":(document.addEventListener("click",n),document.addEventListener("keypress",function(a){r&&(a=a.key.charAt(0).toUpperCase(),a.match(/[A-Z]/)&&D(a))}),C())});