UNPKG

3.6 kBJavaScriptView Raw
1/**!
2* matrix-pointer 0.0.1
3* MIT License
4* Copyright (c) 2023 Yuta Arai
5**/
6"use strict";function B(r){return null!==r}function T(n,u,e){if(Array.isArray(n)){var f=n.length-1;let r=n[u=Math.min(Math.max(0,u),f)],t=0,i=u;for(;!B(r)&&(0<u-t||f>u+t);)B(r=n[i=u-++t])||(r=n[i=u+t]);if(B(r))return{id:r,x:i,y:e}}return null}function n(r,i,n){let u=null;var e=B(i);for(let t=0;r.length>t;t++){var f=r[t];if(Array.isArray(f))for(let r=0;f.length>r;r++){var l=f[r];if(B(l)){if(!u&&(u={id:l,x:r,y:t},!e)&&n)return u;if(l===i)return{id:l,x:r,y:t}}}}return n?u:null}function k(i,n,u,e){if(Array.isArray(i))for(let r=i.length-1,t=null===u?e?0:r:u;e?r>=t:0<=t;e?t++:t--){var f=i[t];if(Array.isArray(f)&&B(f=f[n]))return{id:f,x:n,y:t}}return null}function q(i,n,u,e){if(Array.isArray(i))for(let r=i.length-1,t=null===n?e?0:r:n;e?r>=t:0<=t;e?t++:t--){var f=i[t];if(B(f))return{id:f,x:t,y:u}}return null}module.exports=class extends class{constructor(){this.Emitter$items=[]}on(r,t,i){this.off(r,t),this.Emitter$items.push([r,t,{once:!(null==i||!i.once)}])}off(i,n){for(let r=this.Emitter$items,t=0;r.length>t;t++)("*"===i||r[t][0]===i&&r[t][1]===n)&&r.splice(t--,1)}emit(i,n){this.Emitter$items.forEach(r=>{var t;i===r[0]&&(r[1](Object.assign(Object.assign({},n),{target:this,type:i})),null!=(t=r[2]))&&t.once&&this.off(i,r[1])})}}{constructor(r){super(),this.position=null,this.caches={matrix:[]},this.jump=void 0===r.jump||r.jump,this.loop=void 0===r.loop||r.loop,this.loose=void 0===r.loose||r.loose,this.matrix=r.matrix}update(){var r="function"==typeof this.matrix?this.matrix():this.matrix;return this.caches.matrix=Array.isArray(r)?r.filter(r=>Array.isArray(r)).map(r=>r.map(r=>B(r)?r:null)):[]}focus(r){var t=this.position;return this.position=r,(t||r)&&(null==t?void 0:t.id)!==(null==r?void 0:r.id)&&(t&&this.emit("blur",t),r)&&this.emit("focus",r),r}moveTo(r,t){var i=this.update();return this.focus("number"==typeof r&&"number"==typeof t?function(t,i,n){if(Array.isArray(t)){var u=t.length-1;i=Math.max(0,i);let r=0;var e=t[n=Math.min(Math.max(0,n),u)];if(e=e&&T(e,i,n))return e;for(;0<n-r||u>n+r;){var f=n-++r,l=t[f];if(l=l&&T(l,i,f))return l;if(l=(l=t[f=n+r])&&T(l,i,f))return l}}return null}(i,r,t):n(i,r,!1))}moveBy(g,r){var t=this.update();return this.focus(function(u,e,f,l,s,a){if(e){var o=!0===l||l&&l.x,h=!0===l||l&&l.y,l=!0===s||s&&s.x,s=!0===s||s&&s.y,v=!0===a||a&&a.x,c=!0===a||a&&a.y;let r=e.x,t=e.y,i=r,n=t;var y=u.length-1;if("x"===g)if(s)for(;;){r+=f?1:-1;var d=u[t].length-1,d=r>d,x=r<0;if((r=x||d?o?(c&&(x=(t+=f?1:-1)>y,(t<0||x)&&(t=h?x?0:y:n),n=t),d?0:u[t].length-1):i:r)===i)return e;if(x=function(n,u,e){if(Array.isArray(n)){var f=n.length-1;let r;var l=n[e=Math.min(Math.max(0,e),f)];l&&(r=l[u]);let t=0,i=e;for(;!B(r)&&(0<e-t||f>e+t);){var s=n[i=e-++t];B(r=s?s[u]:r)||(s=n[i=e+t])&&(r=s[u])}if(B(r))return{id:r,x:u,y:i}}return null}(u,i=r,t))return x}else{if(a=q(u[t],e.x+(f?1:-1),t,f))return a;if(!o)return e;if(!c)return q(u[t],null,t,f)||e;for(;;){var A=(t+=f?1:-1)>y,m=t<0;if((t=m||A?h?A?0:y:n:t)===n)return e;if(m=q(u[n=t],null,t,f))return m}}else if(l)for(;;){var M=(t+=f?1:-1)>y;if((t<0||M)&&(h?(t=M?0:y,v&&(r+=f?1:-1,M=u[t].length-1,p=r>M,(r<0||p)&&(r=o?p?0:M:i),i=r)):t=n),t===n)return e;var p=T(u[n=t],r,t);if(p)return p}else{if(s=k(u,r,e.y+(f?1:-1),f))return s;if(!h)return e;if(!v)return k(u,r,null,f)||e;for(;;){r+=f?1:-1;var b=u[t].length-1,j=r>b,O=r<0;if((r=O||j?o?j?0:b:i:r)===i)return e;if(O=k(u,i=r,null,f))return O}}}return null}(t,n(t,null==(t=this.position)?void 0:t.id,!0),r,this.loop,this.loose,this.jump))}destroy(){this.caches.matrix=[],this.off("*")}};