Skip to content

Instantly share code, notes, and snippets.

View mlshv's full-sized avatar

Misha mlshv

View GitHub Profile
@mlshv
mlshv / create-hidpi-canvas.js
Created October 10, 2022 12:16
High DPI canvas that respects device pixel ratio
const PIXEL_RATIO = (() => {
const ctx = document.createElement('canvas').getContext('2d')
if (ctx) {
const dpr = window.devicePixelRatio || 1
const bsr =
ctx.webkitBackingStorePixelRatio ||
ctx.mozBackingStorePixelRatio ||
ctx.msBackingStorePixelRatio ||
ctx.oBackingStorePixelRatio ||
@mlshv
mlshv / mimc7.ts
Created August 22, 2022 08:52
MIMC7 hash implementation TypeScript
import bigInt, { BigInteger } from "big-integer";
const c = [
"0",
"20888961410941983456478427210666206549300505294776164667214940546594746570981",
"15265126113435022738560151911929040668591755459209400716467504685752745317193",
"8334177627492981984476504167502758309043212251641796197711684499645635709656",
"1374324219480165500871639364801692115397519265181803854177629327624133579404",
"11442588683664344394633565859260176446561886575962616332903193988751292992472",
"2558901189096558760448896669327086721003508630712968559048179091037845349145",
@mlshv
mlshv / find-and-replace.js
Last active October 6, 2021 16:17
Find and replace JavaScript function for arrays
export const replace = (array, index, value) => {
return [...array.slice(0, index), value, ...array.slice(index + 1)]
}
/**
* Finds and replaces an item inside an array
* @param {Array} array
* @param {Function} findPredicate Callback for Array.prototype.find
* @param {*|Function} replaceCallbackOrItem Any value: replaced value. Function: recieves old value as argument and should return a new value.
*
@mlshv
mlshv / use-timeout.js
Created December 11, 2020 08:25
useTimeout
import { useState, useEffect } from 'react'
const removeKeyFromState = (key, setState) => {
setState(({ [key]: deletedKey, ...restKeys }) => ({ ...restKeys }))
}
const useTimeout = () => {
const [timeouts, setTimeouts] = useState({})
useEffect(() => {
@mlshv
mlshv / translit.js
Last active October 26, 2023 21:00
Двусторонний транслит (перевод с транслита на русский и наоборот)
// Чуть-чуть поменял код отсюда: https://javascript.ru/forum/misc/27347-nadezhnyjj-dvukhstoronnijj-translit.html#post168115
var transliterate = (
function() {
var rus = "щ ш ч ц ю я ё ж з ъ ы э а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g);
var eng = "shh sh ch cz yu ya yo zh th `` y' e` a b v g d e z i j k l m n o p r s t u f h `".split(/ +/g);
return function(text, engToRus) {
for (var x = 0; x < rus.length; x++) {
text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase());
@mlshv
mlshv / Button.jsx
Last active September 24, 2019 10:49
sc override with classes
import React from 'react'
import styled from 'styled-components'
import Icon from 'components/Icon'
const ButtonWrap = styled.button`
padding: 8px 12px;
color: #fff;
background: #333;
`
@mlshv
mlshv / Article.js
Last active November 20, 2018 09:15
import React, { Component } from "react";
class Article extends Component {
constructor(props) {
super(props)
this.state = {
isOpen: props.defaultOpen,
idAd: props.idAd
}
@mlshv
mlshv / example.js
Created November 17, 2018 09:23
single variable example event
// in some react class component
handleChangeInput = (e) => {
this.setState({ [e.target.name]: e.target.value })
}
@mlshv
mlshv / example.js
Last active November 17, 2018 09:15
single variable example for-loop in generator
for (const a of actions) {
watchers.push(yield createWatcher(a))
}
@mlshv
mlshv / example.js
Last active March 1, 2019 09:12
single variable example exception
try {
return someUnsafeAction();
} catch (e) {
console.error(e);
return `Error: ${e.message}`;
}