HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/AppData/Local/Microsoft/OneDrive/26.168.0830.0006/WebAssets/static/views/jigsaw.js
(function(){"use strict";var p=document.getElementById("canvas"),a=p.getContext("2d"),ct=document.getElementById("hud"),ht=document.getElementById("controls"),mt=document.getElementById("ctrl-toggle"),X=document.getElementById("diff-slider"),gt=document.getElementById("diff-label"),yt=document.getElementById("btn-scatter"),bt=document.getElementById("btn-new"),J=document.getElementById("picker-overlay"),Q=document.getElementById("picker-grid"),$=document.getElementById("picker-prev"),j=document.getElementById("picker-next"),Y=document.getElementById("complete-overlay"),I,P,tt=performance.now(),x=0,E=0,u=1,wt=.1,pt=5,s=null,B={x:0,y:0},W=!1,q=0,R=0,z=[],d=[],L=null,h=4,w=3,m=0,g=0,et=0,M=0,k=0,H=0,O=0,U=!1,Z=30,N=[],A=[],F=[],T=0,D=48;function nt(){I=window.innerWidth,P=window.innerHeight,p.width=I,p.height=P}nt(),window.addEventListener("resize",nt);function G(t,n){return{x:(t-x)/u,y:(n-E)/u}}mt.addEventListener("click",function(){ht.classList.toggle("collapsed")}),X.addEventListener("input",function(){gt.textContent=X.value+" columns"}),X.addEventListener("change",function(){L&&rt(L)}),yt.addEventListener("click",ot),bt.addEventListener("click",at);function xt(){return ViewLib.Thumbnail.fetchThumbnailPage(0,200).then(function(t){F=ViewLib.Thumbnail.filterValidThumbnails(t.items)}).catch(function(t){console.error("Failed to load catalog",t)})}function at(){U=!1,Y.classList.remove("show"),T=0,K(),J.classList.remove("hidden")}function K(){Q.innerHTML="";for(var t=F.slice(T,T+D),n=0;n<t.length;n++)(function(e){var r=document.createElement("div");r.className="picker-thumb";var o=document.createElement("img");o.dataset.od4ApiName="thumbnail.single",o.src=ViewLib.Thumbnail.buildThumbnailUrl(e.thumbnailId),o.loading="lazy",r.appendChild(o),r.addEventListener("click",function(){Et(e)}),Q.appendChild(r)})(t[n]);$.disabled=T===0,j.disabled=T+D>=F.length}$.addEventListener("click",function(){T=Math.max(0,T-D),K()}),j.addEventListener("click",function(){T+=D,K()});function Et(t){J.classList.add("hidden");var n=new Image;n.onload=function(){L=n,rt(n)},n.dataset.od4ApiName="thumbnail.single",n.src=ViewLib.Thumbnail.buildThumbnailUrl(t.thumbnailId)}function rt(t){h=parseInt(X.value,10);var n=t.naturalWidth/t.naturalHeight;w=Math.max(2,Math.round(h/n));var e=600;m=e/h,g=e/n/w,et=Math.min(m,g)*.15;var r=h*m,o=w*g;M=-r/2,k=-o/2,Lt(),d=[],H=0,U=!1,Y.classList.remove("show");for(var l=0;l<w;l++)for(var i=0;i<h;i++)d.push({col:i,row:l,x:0,y:0,vx:0,vy:0,vr:0,rotation:0,snapped:!1,edges:[N[l*h+i],-A[l*(h+1)+(i+1)],-N[(l+1)*h+i],A[l*(h+1)+i]]});O=d.length,st(),x=I/2,E=P/2,u=1,ot()}function Lt(){N=[];for(var t=0;t<=w;t++)for(var n=0;n<h;n++)N.push(t===0||t===w?0:Math.random()<.5?1:-1);A=[];for(var e=0;e<w;e++)for(var r=0;r<=h;r++)A.push(r===0||r===h?0:Math.random()<.5?1:-1)}function ot(){for(var t=Math.max(h,w)*m*1.2,n=0;n<d.length;n++){var e=d[n];e.snapped||(e.x=(Math.random()-.5)*t*2,e.y=(Math.random()-.5)*t*2,e.rotation=(Math.random()-.5)*1,e.vx=(Math.random()-.5)*200,e.vy=(Math.random()-.5)*200,e.vr=(Math.random()-.5)*1.5)}}function _(t,n,e,r,o,l){if(l===0){t.lineTo(r,o);return}var i=r-n,v=o-e,y=Math.sqrt(i*i+v*v),c=-v/y,b=i/y,f=y*.22*l,S=n+i*.35,vt=e+v*.35,ut=n+i*.65,ft=e+v*.65,Pt=S+c*f*.1,zt=vt+b*f*.1,Ct=n+i*.25+c*f,St=e+v*.25+b*f,Xt=n+i*.75+c*f,Yt=e+v*.75+b*f,Bt=n+i*.38+c*f,Wt=e+v*.38+b*f,Ht=n+i*.62+c*f,Ot=e+v*.62+b*f,Nt=ut+c*f*.1,At=ft+b*f*.1;t.lineTo(S,vt),t.bezierCurveTo(Pt,zt,Ct,St,Bt,Wt),t.bezierCurveTo(n+i*.45+c*f*1.15,e+v*.45+b*f*1.15,n+i*.55+c*f*1.15,e+v*.55+b*f*1.15,Ht,Ot),t.bezierCurveTo(Xt,Yt,Nt,At,ut,ft),t.lineTo(r,o)}function C(t,n){var e=m,r=g,o=n.edges,l=-e/2,i=-r/2,v=e/2,y=-r/2,c=e/2,b=r/2,f=-e/2,S=r/2;t.beginPath(),t.moveTo(l,i),_(t,l,i,v,y,o[0]),_(t,v,y,c,b,o[1]),_(t,c,b,f,S,o[2]),_(t,f,S,l,i,o[3]),t.closePath()}function it(t){if(L){a.save(),a.translate(t.x,t.y),a.rotate(t.rotation),t.snapped||(a.shadowColor="rgba(0,0,0,0.5)",a.shadowBlur=12/u,a.shadowOffsetX=4/u,a.shadowOffsetY=4/u),C(a,t),a.fillStyle=V()?"#bbb":"#333",a.fill(),a.shadowColor="transparent",a.shadowBlur=0,a.shadowOffsetX=0,a.shadowOffsetY=0,a.save(),C(a,t),a.clip();var n=L.naturalWidth,e=L.naturalHeight,r=-(t.col+.5)*m,o=-(t.row+.5)*g;a.drawImage(L,0,0,n,e,r,o,h*m,w*g),t.snapped&&(a.fillStyle=V()?"rgba(0,0,0,0.04)":"rgba(255,255,255,0.06)",a.fillRect(-m,-g,m*2,g*2)),a.restore(),C(a,t);var l=V();a.strokeStyle=t.snapped?l?"rgba(0,0,0,0.1)":"rgba(255,255,255,0.15)":l?"rgba(0,0,0,0.25)":"rgba(0,0,0,0.4)",a.lineWidth=1/u,a.stroke(),a.restore()}}function V(){return document.documentElement.getAttribute("data-theme")==="light"}function Mt(){if(L){var t=V(),n=h*m,e=w*g;a.strokeStyle=t?"rgba(0,0,0,0.2)":"rgba(255,255,255,0.1)",a.lineWidth=2/u,a.setLineDash([8/u,8/u]),a.strokeRect(M,k,n,e),a.lineWidth=1/u,a.strokeStyle=t?"rgba(0,0,0,0.08)":"rgba(255,255,255,0.05)";for(var r=1;r<h;r++)a.beginPath(),a.moveTo(M+r*m,k),a.lineTo(M+r*m,k+e),a.stroke();for(var o=1;o<w;o++)a.beginPath(),a.moveTo(M,k+o*g),a.lineTo(M+n,k+o*g),a.stroke();a.setLineDash([])}}function lt(t,n,e){if(e.snapped)return!1;var r=t-e.x,o=n-e.y,l=Math.cos(-e.rotation),i=Math.sin(-e.rotation),v=r*l-o*i,y=r*i+o*l,c=et*2;if(v<-m/2-c||v>m/2+c||y<-g/2-c||y>g/2+c)return!1;a.save(),a.setTransform(1,0,0,1,0,0),C(a,e);var b=a.isPointInPath(v,y);return a.restore(),b}function kt(t){if(!t.snapped){var n=M+(t.col+.5)*m,e=k+(t.row+.5)*g,r=t.x-n,o=t.y-e,l=Math.sqrt(r*r+o*o);l<Z&&(t.x=n,t.y=e,t.rotation=0,t.vx=0,t.vy=0,t.vr=0,t.snapped=!0,H++,st(),Tt())}}function Tt(){H===O&&O>0&&(U=!0,Y.classList.add("show"),setTimeout(function(){Y.classList.remove("show")},3e3))}function st(){ct.textContent=H+" / "+O+" pieces"}p.addEventListener("mousedown",function(t){if(t.button===1){W=!0,q=t.clientX-x,R=t.clientY-E,p.classList.add("grabbing"),t.preventDefault();return}if(t.button===0){var n=G(t.clientX,t.clientY);z=[{x:t.clientX,y:t.clientY,t:performance.now()}];for(var e=d.length-1;e>=0;e--)if(lt(n.x,n.y,d[e])){s=d[e],d.splice(e,1),d.push(s),B.x=n.x-s.x,B.y=n.y-s.y,s.vx=0,s.vy=0,s.vr=0,p.classList.add("grabbing");return}W=!0,q=t.clientX-x,R=t.clientY-E,p.classList.add("grabbing")}}),window.addEventListener("mousemove",function(t){if(z.push({x:t.clientX,y:t.clientY,t:performance.now()}),z.length>5&&z.shift(),s){var n=G(t.clientX,t.clientY);s.x=n.x-B.x,s.y=n.y-B.y}else W&&(x=t.clientX-q,E=t.clientY-R)}),window.addEventListener("mouseup",function(){if(s){var t=performance.now(),n=z.filter(function(l){return t-l.t<100});if(n.length>=2){var e=n[0],r=n[n.length-1],o=(r.t-e.t)/1e3;o>.001&&(s.vx=(r.x-e.x)/o/u,s.vy=(r.y-e.y)/o/u,s.vr=(Math.random()-.5)*1.5)}kt(s),s=null}W=!1,p.classList.remove("grabbing")}),p.addEventListener("contextmenu",function(t){t.preventDefault();for(var n=G(t.clientX,t.clientY),e=d.length-1;e>=0;e--)if(lt(n.x,n.y,d[e])){d[e].rotation+=Math.PI/2,d[e].vr=0;break}}),p.addEventListener("wheel",function(t){t.preventDefault();var n=t.clientX,e=t.clientY,r=u;u=Math.min(pt,Math.max(wt,u*(1+-t.deltaY*.001)));var o=u/r;x=n-o*(n-x),E=e-o*(e-E)},{passive:!1});function It(t){for(var n=0;n<d.length;n++){var e=d[n];e===s||e.snapped||(e.x+=e.vx*t,e.y+=e.vy*t,e.rotation+=e.vr*t,e.vx*=.97,e.vy*=.97,e.vr*=.95,Math.abs(e.vx)<.5&&(e.vx=0),Math.abs(e.vy)<.5&&(e.vy=0),Math.abs(e.vr)<.01&&(e.vr=0))}}function dt(){requestAnimationFrame(dt);var t=performance.now(),n=Math.min((t-tt)/1e3,.1);tt=t,It(n),a.fillStyle=getComputedStyle(document.body).backgroundColor||"#1a1a1a",a.fillRect(0,0,I,P),a.save(),a.translate(x,E),a.scale(u,u),Mt();for(var e=0;e<d.length;e++)d[e].snapped&&it(d[e]);for(var r=0;r<d.length;r++)d[r].snapped||it(d[r]);if(s&&!s.snapped){var o=M+(s.col+.5)*m,l=k+(s.row+.5)*g,i=s.x-o,v=s.y-l,y=Math.sqrt(i*i+v*v);if(y<Z*2){var c=Math.max(0,1-y/(Z*2))*.3;a.save(),a.translate(o,l),C(a,s),a.fillStyle="rgba(123, 157, 255, "+c+")",a.fill(),a.restore()}}a.restore()}xt().then(function(){x=I/2,E=P/2,dt(),at()})})();