helpers.js (2938B)
1 const partial = (f, ...args) => (...moreArgs) => f(...args, ...moreArgs); 2 const oneTime = (target, type, handler) => { 3 const doOnce = (ev) => { 4 target.removeEventListener(type, doOnce); 5 handler(ev); 6 } 7 target.addEventListener(type, doOnce); 8 } 9 10 export default { 11 partial, 12 oneTime, 13 linear: (m, x, b) => (m * x) + b, 14 bounded: (val, min, max) => { 15 if (min !== undefined && min !== null && val < min) { 16 return min; 17 } 18 else if (max !== undefined && max !== null && val > max) { 19 return max; 20 } 21 else 22 return val; 23 }, 24 scale: (buf, amt) => buf.map(val => val * amt), 25 add: (arr1, arr2) => arr1.map((v, i) => v + arr2[i]), 26 soon: (fn, ms=0) => { 27 return (...args) => 28 window.setTimeout(partial(fn, ...args), ms); 29 }, 30 throttle: (fn, ms, performFinalCall) => { 31 let time = 0; 32 let finalCall = null; 33 return (...args) => { 34 let now = Date.now(); 35 if (finalCall) 36 window.clearTimeout(finalCall); 37 if (now >= time + ms) { 38 fn(...args); 39 time = now; 40 } 41 else if (performFinalCall) { 42 finalCall = window.setTimeout(() => { 43 fn(...args); 44 }, time - now - ms); 45 } 46 } 47 }, 48 clickNDrag: (el, onDown, onMove, onUp, moveEl=document) => { 49 el.addEventListener('mousedown', (downEv) => { 50 downEv.preventDefault(); 51 if (onMove) { 52 moveEl.addEventListener('mousemove', onMove); 53 } 54 onDown && onDown(downEv); 55 oneTime(moveEl, 'mouseup', (upEv) => { 56 onUp && onUp(upEv); 57 if (onMove) { 58 moveEl.removeEventListener('mousemove', onMove) 59 } 60 }); 61 }) 62 }, 63 boolArray: { 64 setLength: (ba, newLength) => { 65 let newBa = ba.slice(0, newLength); 66 if (ba.length < newLength) { 67 newBa = newBa.concat(new Array(newLength - ba.length).fill(false)); 68 } 69 return newBa; 70 }, create: (length) => { 71 return new Array(length).fill(false); 72 }, 73 update: (ba, idx, val) => { 74 const newBa = ba.slice(); 75 newBa[idx] = val; 76 return newBa; 77 } 78 }, 79 immObjArray: { 80 update: (arr, idx, opts) => { 81 const newArr = arr.slice(); 82 newArr[idx] = Object.assign({}, arr[idx], opts) 83 return newArr; 84 }, 85 add: (arr, idx, opts) => { 86 const newArr = arr.slice(); 87 newArr.splice(idx, 0, opts); 88 return newArr; 89 }, 90 remove: (arr, idx) => { 91 const newArr = arr.slice(); 92 newArr.splice(idx, 1); 93 return newArr; 94 } 95 } 96 };