Skip to content

Instantly share code, notes, and snippets.

View 197291's full-sized avatar
:octocat:

Yuriy Provotorov 197291

:octocat:
  • Taganrog
View GitHub Profile

Алгоритм расчёта итогового размера с flex-shrink

Ниже описан механизм расчёта размеров элементов, когда места в контейнере не хватает:

1 шаг. Рассчитываем отрицательное пространство (ОП) во флекс-контейнере:

ОП = Ширина контейнера - Сумма базовых размеров элементов

2 шаг. Находим сумму произведений базовых размеров (СПБР) элементов на их коэффициенты сжатия:

СПБР = (Базовый размер1 * flex-shrink1) + (Базовый размер2 * flex-shrink2) + … + (Базовый размерn * flex-shrinkn)

3 шаг. Для каждого элемента считаем «нормированный коэффициент сжатия» (НКС), для чего произведение базового размера элемента на его коэффициент сжатия делим на СПБР:

4 шаг. Базовый размер элемента уменьшаем на часть ОП пропорциональную НКС элемента:

Итоговый размер = Базовый размер - (НКС * ОП)
@197291
197291 / Cancelable promise
Created October 27, 2018 06:20
Cancelable promise
export interface CancelablePromise<T> {
promise: Promise<T>;
cancel(): void;
}
/**
* Make a Promise cancelable
*/
export const makeCancelablePromise = <T>(promise: Promise<T>): CancelablePromise<T> => {
let hasCanceled = false;
@197291
197291 / class Api
Created October 27, 2018 06:22
Api
import axios, { AxiosRequestConfig } from 'axios';
import queryString from 'query-string';
import { Store } from 'redux';
import { isNil, omitBy, flow } from 'lodash';
import { BASE_URL } from 'redux/constants';
import { showError } from 'redux/actions';
import { isIe } from 'helpers';
const processConfig = (config: AxiosRequestConfig): AxiosRequestConfig => {
@197291
197291 / Time with offset of timeZone
Created December 4, 2018 09:11
Time with timeZone offset
calcTime(city: any, offset: any) {
// create Date object for current location
const d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
const utc = d.getTime() + (d.getTimezoneOffset() * 60000);
class LinkedList {
constructor(...values) {
this.head = null;
this.length = 0;
this.addToHead(...values);
}
_addSingleItemToHead(value) {
const newNode = { value };
newNode.next = this.head;
@197291
197291 / CheckChangesReact.ts
Created January 9, 2019 08:57
CheckChanges ComponentDidUpdate, ComponentWillReceiveProps
export const checkChangesDidUpdate = (prevProps: any, prevState: any, curProps: any, curState: any) => {
(Object as any).entries(curProps).forEach(([key, val]) =>
prevProps[key] !== val && console.log(`Prop '${key}' from ${prevProps[key]} to ${curProps[key]} changed`)
);
(Object as any).entries(curState).forEach(([key, val]) =>
prevState[key] !== val && console.log(`State '${key}' from ${prevState} to ${curState} changed`)
);
};
function Node(value) {
this.data = value;
this.previous = null;
this.next = null;
}
function DoublyList() {
this._length = 0;
this.head = null;
this.tail = null;
}
let brackets = {
"[": "]",
"{": "}",
"(": ")",
"<": ">"
}
function correctBrackets (str) {
const vals = Object.keys(brackets).map(key => brackets[key]);
const keys = Object.keys(brackets);
@197291
197291 / InputMultiImage
Created February 7, 2019 07:39
Load Multiple Images
import React, { ChangeEvent } from 'react';
import cx from 'classnames';
import uuid from 'uuid';
import photoIcon from 'Common/assets/photo.svg';
import './index.css';
export interface IProps {
setImgUrl(img: {
id: string;
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2