Skip to content

Instantly share code, notes, and snippets.

View krutoo's full-sized avatar

Dmitry Petrov krutoo

  • Ekaterinburg, Russia
View GitHub Profile
@krutoo
krutoo / readdirRecuriveSync.js
Last active May 4, 2018 17:05
Node.js readdirRecuriveSync
import fs from 'fs';
import path from 'path';
export function readdirRecuriveSync(dir, filelist) {
filelist = filelist || [];
var files = fs.readdirSync(dir);
files.forEach(function (file) {
file = path.join(dir, file);
@krutoo
krutoo / cookieHelper.js
Last active December 19, 2018 12:35
Document cookie parser
/**
* Returns object with cookies.
* @return {Object} cookies by names.
*/
export const parseCookie = () => {
let cookies = {};
try {
cookies = document.cookie
.split('; ')
.reduce((result, cookie) => {
@krutoo
krutoo / ajax.js
Last active April 8, 2020 10:07
Simple AJAX helper (not checked)
export const ajax = (url, {
method = 'GET',
contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
data,
onDone,
} = {}) => {
const xhr = new XMLHttpRequest();
if (typeof onDone === 'function') {
const handler = () => onDone(xhr);
@krutoo
krutoo / hooks.js
Last active April 8, 2020 09:49
Custom react hooks
import isEqual from 'lodash/isEqual';
import { useState, useEffect, useRef, useMemo as defaultUseMemo } from 'react';
export const useOnMount = callback => {
useEffect(callback, []);
};
export const useForceUpdate = () => {
const [, setState] = useState(null);
return () => setState(Math.random());
@krutoo
krutoo / Vec2.js
Last active November 25, 2020 15:57
2D immutable vector representation utilities
import { toRadians, toDegrees } from './math.js';
export const Vec2 = {
of (x, y) {
return { x, y };
},
length (v) {
return Math.sqrt(v.x ** 2 + v.y ** 2);
},
@krutoo
krutoo / utils.js
Created January 11, 2020 07:31
DOM shortcut utils
export const $ = selectors => document.querySelector(selectors);
export const $$ = selectors => document.querySelectorAll(selectors);
// on(div, 'click touch', () => {});
export const on = (target, eventNames, handler, options) => {
const eventNamesList = eventNames.split(' ');
eventNamesList.forEach(eventName => {
target.addEventListener(eventName, handler, options);
@krutoo
krutoo / parseMultiple.js
Last active January 26, 2022 19:31
date-fns parse multiple formats
import { default as parse } from 'date-fns/parse';
import { default as isValid } from 'date-fns/isValid';
// like parse but second argument must array of strings
// returns date
export const parseMultiple = (
dateString,
formatString,
referenceDate,
options
@krutoo
krutoo / takeChain.js
Last active June 25, 2020 06:38
takeChain redux-saga custom effect
export const takeChain (timeout, types, task, ...args) => fork(function * () {
while (true) {
const BREAK_TYPE = `BREAK_${performance.now()}`;
const collectedActions = [yield take(types)];
yield fork(putDelayed, timeout, BREAK_TYPE);
while (true) {
const { action, canceled } = yield race({
action: take(types),
@krutoo
krutoo / get-scroll-parent.js
Last active July 8, 2020 04:57 — forked from gre/scrollparent.js
get first parent scrollable container of a DOM element
// more minimal version of https://github.com/olahol/scrollparent.js/blob/master/scrollparent.js
const regex = /(auto|scroll)/;
const isScrollable = element => {
let result = false;
if (element) {
const styles = getComputedStyle(element);
result = regex.test(styles.overflow + styles.overflowX + styles.overflowY);
}
@krutoo
krutoo / sum.js
Created September 21, 2020 03:54
sum(1, 2)(3)(4, 5) == 15
const add = (a, b) => a + b;
const sumList = numbers => numbers.reduce(add, 0);
const sum = (...startValues) => {
let total = sumList(startValues);
const fn = (...values) => (total += sumList(values), fn);
fn.valueOf = () => total;