This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export function createWorker(callable) { | |
const code = `(${callable.toString()})()`; | |
const blob = new Blob([code], { type: 'text/javascript' }); | |
const url = URL.createObjectURL(blob); | |
const worker = new Worker(url); | |
URL.revokeObjectURL(url); | |
return worker; | |
} | |
export function executeWorker(callable, data) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const s2l = c => (c > 0.04045 ? ((c + 0.055) / 1.055) ** 2.4 : c / 12.92); | |
const l2s = c => (c > 0.0031308 ? 1.055 * Math.pow(c, 1 / 2.4) - 0.055 : 12.92 * c); | |
const LINEAR = new Array(256).fill().map((_, i) => s2l(i / 255)); | |
onmessage = ({ data: { srcData, srcWidth, srcHeight, dstWidth, dstHeight } }) => { | |
const { ceil, floor, abs, min, hypot } = Math; | |
const ratioH = srcHeight / dstHeight; | |
const ratioW = srcWidth / dstWidth; | |
const halfRatioW = ceil(ratioW / 2); | |
const halfRatioH = ceil(ratioH / 2); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
onmessage = ({ data: { data, width, height } }) => { | |
const add = (d, i, v) => { | |
if (i >= d.length) return; | |
d[i] += v; | |
}; | |
let i = 0, | |
w = width * 4; | |
for (let y = 0; y < height; y++) { | |
for (let x = 0; x < width; x++, i += 4) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
onmessage = ({ data: { data, width, height } }) => { | |
const thresholdMap = [ | |
[15, 135, 45, 165], | |
[195, 75, 225, 105], | |
[60, 180, 30, 150], | |
[240, 120, 210, 90], | |
]; | |
let min = 255, | |
max = 0, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
onmessage = ({ data: { data, width, height } }) => { | |
const add = (d, i, v) => { | |
if (i >= d.length) return; | |
d[i] += v; | |
}; | |
const w = width * 4; | |
let i = 0; | |
for (let y = 0; y < height; y++) { | |
for (let x = 0; x < width; x++, i += 4) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Matrices multiply | |
const multiply = (a, b) => a.map((_, r) => b[0].map((_, c) => a[r].reduce((s,_,i) => s + a[r][i] * b[i][c], 0))); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const color_distance = ([ L1, a1, b1 ], [ L2, a2, b2 ] ) => Math.hypot( L1 - L2, a1 - a2, b1 - b2 ); | |
const linear = x => x >= 0.04045 ? ((x + 0.055) / (1 + 0.055)) ** 2.4 : x / 12.92; | |
const gamma = x => x >= 0.0031308 ? 1.055 * x ** (1 / 2.4) - 0.055 : 12.92 * x; | |
const clamp = x => Math.min ( 255, Math.max ( 0, x ) ); | |
const multiply = (a, b) => |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Find all elements with openned ShadowRoots | |
* | |
* @param {Node} e - An element that we should search for ShadowRoots within. | |
* @returns {Array<Element>} Array of Elements that holds ShadowRoot | |
*/ | |
const findRoots = (e = document.documentElement) => | |
[e,...e.querySelectorAll('*')] | |
.filter(e => e.shadowRoot) | |
.flatMap(e => [e, ...findRoots(e.shadowRoot)]); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// calculate week number for date | |
function calcWN(y, m, d) { | |
let J = gc2jd(y, m, d); | |
let d4 = (J + 31741 - J % 7) % 146097 % 36524 % 1461; | |
let L = 0 | d4 / 1460; | |
let d1 = (d4 - L) % 365 + L; | |
return (0 | d1 / 7) + 1; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Debug mode | |
const DEBUG = true; | |
const log = (...args) => { | |
if (DEBUG) console.log(...args); | |
} | |
// regular expression to parse numbers | |
const rxNumberStr = '[+-]?(?:(?:[0-9]+\\.[0-9]+)|(?:\\.[0-9]+)|(?:[0-9]+))(?:[eE][+-]?[0-9]+)?'; | |
// regular expression to parse next lemma from d attribute of <path> | |
const rxDLemmaStr = `[MmLlHhVvCcSsQqTtAaZz]|${rxNumberStr}`; |