Skip to content

Instantly share code, notes, and snippets.

@monochromer
monochromer / web-components.md
Last active September 27, 2023 10:30
Сергей Куликов. Веб-компоненты (Web Components)

Сергей Куликов. Веб-компоненты

Оригинал в twitter-канале jsunderhood: https://twitter.com/jsunderhood/status/1328042944985706512

Кастомные элементы: знакомство.

О том, почему не взлетели веб-компоненты.

О применении кастомных элементов в 2020.

@monochromer
monochromer / lazy-hydration.md
Last active August 1, 2023 05:46
React Lazy Hydration

https://t.me/super_oleg_dev/102

Ленивая гидрация позволяет не выполнять реакту код компонента на клиенте сразу при гидрации всего приложения, и отлично комбинируется с IntersectionObserver - можно выполнять код только при попадании компонента в область видимости.

Также, можно вообще не выполнять код на клиенте пометив блок как статичный, и каким-либо образом убирать его из клиентского бандла.

Механизм достаточно простой, это по сути легализованный хак в React, детали есть в этом issue - facebook/react#10923 (comment)

Код для lazy обертки может базово выглядеть так:

@monochromer
monochromer / index.11tydata.js
Last active June 28, 2023 19:05
Eleventy double pagination
function createPagination(paginationOptions) {
return {
data: typeof paginationOptions.data === 'string'
? paginationOptions.data
: 'collections.all',
size: 1,
alias: paginationOptions.alias ?? 'paginationChunk',
@monochromer
monochromer / dual-package.md
Last active June 7, 2023 15:48
Роман Дворнов. Организация dual package с поддержкой модулей EcmaScripts и CommonsJS

Оригинал: https://t.me/gorshochekvarit/175

Dual Package - ESM и CJS

Примерно год назад стал очевиден тренд на переход всего и вся на ESM. Было несколько заявлений от опенсорс мейнтейнеров, самое известное, возможно, пост от Sindre Sorhus. Стало понятно, что нужно смотреть в эту сторону и думать как перевести свои проекты на ESM, в том числе CSSTree (и должно быть частью 2.0). Но в отличие от Sindre, я планировал перевод не на Pure ESM (поддержка только ESM), а на Dual, когда поддерживается и ESM и CommonJS.

Кажется, что до сих пор нет единого мнения о том как правильно – есть ярые сторонники как Pure ESM, так и Dual. У каждого подхода свои плюсы и минусы. Я склоняюсь к Dual, потому что попробовав использовать ESM на нескольких Node.js проектах (библиотеки и скрипты), пришел к мнению, что CommonJS во многих случаях и проще, и уместнее ESM. А вот если говорить про код испо

@monochromer
monochromer / ComponentHelper.rb
Last active April 24, 2023 16:31
Ruby on Rails view component helpers
# https://www.innoq.com/en/blog/rails-frontend-components/
# app/helpers
module ComponentHelper
def component(name, data: {}, &block)
render_component("#{name}/#{name}", { data: data }, &block)
end
private
def render_component(name, locals, &block)
@monochromer
monochromer / html-stream-generator.js
Last active April 4, 2023 16:54
WIP. Потоковая выдача html через генераторы
function isGenerator(target) {
return target[Symbol.toStringTag] === 'GeneratorFunction';
}
function isIterable(obj) {
if (obj === null || obj === void 0) {
return false;
}
if (typeof obj === 'string') {
@monochromer
monochromer / flex-grow.md
Last active March 5, 2023 15:37
Алгоритмы расчета flex-grow и flex-shrink

Расчёт итогового размера с flex-grow

1 шаг. Рассчитываем свободное место во флекс-контейнере:

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

2 шаг. Считаем размер минимальной доли свободного места:

Доля свободного места = Свободное место / Сумма flex-grow всех элементов

3 шаг. Базовый размер каждого флекс-элемента увеличиваем на размер минимальной доли свободного места умноженной на значение flex-grow этого элемента:

Итоговый размер = Базовый размер + (Доля свободного места * flex-grow)

Для верхнего блока с енотами хочется задать коэффициенты 1 и 2. Но нужные размеры блоков получаются с коэффициентами 1 и 3. Давайте посчитаем:

Свободное место = 300px - (50px * 2) = 200px
@monochromer
monochromer / nginx-location.md
Last active November 9, 2022 09:30
nginx location