Skip to content

Instantly share code, notes, and snippets.

View avisek's full-sized avatar

Avisek Das avisek

  • Planet Earth
View GitHub Profile
@avisek
avisek / constrain.js
Created November 13, 2023 17:38
Constrains a number between a minimum and maximum value.
function constrain(value, min, max) {
return Math.min(Math.max(value, min), max)
}
@avisek
avisek / copyOrMoveRecursively.ts
Created November 7, 2023 16:05
Recursively copy and move files & directories using Node.js
function copyRecursively(sourceDir: string, destinationDir: string): void {
const files = fs.readdirSync(sourceDir)
if (!fs.existsSync(destinationDir))
fs.mkdirSync(destinationDir, { recursive: true })
files.forEach(file => {
const sourceFile = path.join(sourceDir, file)
const destinationFile = path.join(destinationDir, file)
@avisek
avisek / colorConversions.js
Created May 21, 2022 12:11
RGB, HSL, XYZ, LAB, LCH color conversion algorithms in JavaScript
export function rgbToHsl(rgb) {
const r = rgb.r / 255
const g = rgb.g / 255
const b = rgb.b / 255
const max = Math.max(r, g, b), min = Math.min(r, g, b)
let h, s, l = (max + min) / 2
if (max == min) {
h = s = 0 // achromatic
@avisek
avisek / ResizeObserverPolyfill.js
Created April 19, 2022 19:53
Tiny ResizeObserver polyfill
// https://codepen.io/dgca/pen/WoJoNB
export const ResizeObserver = window.ResizeObserver || class ResizeObserver {
constructor(callback) {
this.observables = [];
// Array of observed elements that looks like this:
// [{
// el: domNode,
// size: {height: x, width: y}
// }]
this.boundCheck = this.check.bind(this);
@avisek
avisek / delete-folders-via-npm-script.markdown
Last active April 29, 2022 10:46
Delete folders via NPM script

Add below code in package.json script

{
  "scripts": {
     "rmdir": "node -e \"var fs = require('fs'); process.argv.slice(1).map((fpath) => fs.rmdirSync(fpath, { recursive: true })); process.exit(0);\"",
  }
}

Then execute as below in command window

@avisek
avisek / flexbox-holy-albatross-quantity-query.markdown
Created October 3, 2019 07:51
Flexbox Holy Albatross + Quantity Query
function getRandomColor() {
var x = Math.round(0xffffff * Math.random()).toString(16);
var y = (6 - x.length);
var z = '000000';
var z1 = z.substring(0, y);
return '#' + z1 + x;
}
@avisek
avisek / colorpicker-tool.markdown
Created November 2, 2018 08:32
ColorPicker tool
/**
* Return the first ancestor for which the {@code predicate} returns true.
* @param {Node} node The node to check.
* @param {function(Node):boolean} predicate The function that tests the
* nodes.
* @return {Node} The found ancestor or null if not found.
*/
function findAncestor(node, predicate) {
var last = false;
while (node != null && !(last = predicate(node))) {
function getOffset(element) {
var left = element.offsetLeft;
var top = element.offsetTop;
while (element = element.offsetParent) {
left += element.offsetLeft + element.clientLeft - element.scrollLeft;
top += element.offsetTop + element.clientTop - element.scrollTop;
}
return {
left: left,
top: top