WebDev+ | Веб-разработка
8.3K subscribers
507 photos
242 videos
10 files
702 links
Присоединяйтесь к нашему каналу и погрузитесь в мир веб-разработки

Связь: @devmangx
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Создавай SVG-графики для своего сайта без библиотек

Импортируй данные из Excel, CSV или вводи вручную.
Доступно 8 разных типов, и всё это можно сделать за пару секунд.

https://makegraph.app/

@WebDev_Plus
3
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчик из factory droids сделал Chrome-расширение, которое помогает навести порядок в браузере. Tab Stash позволяет «спрятать» десятки (а то и сотни) вкладок, чтобы вернуться к ним позже и наконец-то добраться до заветного tab zero 😰

Установить: Tab Stash в Chrome Web Store
Исходники: github.com/iannuttall/tab-stash

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Не нужно разбирать строки через [...spread] или .split()

Используй Intl.Segmenter API — он доступен во всех JS-рантаймах.

@WebDev_Plus
4
Получить размеры экрана через простой calc()? Да, можно

https://css-tip.com/screen-dimension/

Мы всё ещё ждём, когда Firefox подтянется, и тогда этот кусок кода станет любимчиком у многих разработчиков.

(Пока что есть другой способ с лучшей поддержкой.)

@WebDev_Plus
5
Одна из самых крутых штук, которые можно сделать с TypeScript:

обрати внимание, что подсказки автодополнения зависят от входных данных функции-билдера.

@WebDev_Plus
3🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
Валидатор паролей с использованием HTML, CSS и JavaScript

Код: тык

@WebDev_Plus
1
This media is not supported in your browser
VIEW IN TELEGRAM
Этот инструмент проверяет производительность твоего сайта.

Он сканирует все страницы и выставляет оценку каждой.

Похоже на Lighthouse, но с обзором всего сайта целиком.

Запусти вот так:

npx unlighthouse --site <твой-сайт>


@WebDev_Plus
32
This media is not supported in your browser
VIEW IN TELEGRAM
В Chrome DevTools завезли классное обновление для CSS

Теперь, когда наводишь курсор на любое CSS-свойство в DevTools, отображается не только описание, но и информация из Baseline — она показывает, насколько хорошо это свойство поддерживается разными браузерами.

Появились метки вроде «Широко поддерживается», «Ограниченная поддержка» и «Недавно стало доступно».

Очень полезное обновление для фронтенд-разработчиков: можно мгновенно проверить поддержку нужного свойства, не покидая DevTools.

Спасибо команде ChromiumDev за этот апдейт. Маленькое изменение, а польза огромная :)

@WebDev_Plus
4
Этот крошечный утилитарный модуль на TypeScript делает твой код типобезопасным, переиспользуемым и полностью выводимым по типам

Паттерн TypeScript для чистой и типобезопасной выборки данных

type KeyOf<T> = Extract<keyof T, string>;

const mapData = <T extends object, K extends KeyOf<T>>(
data: readonly T[],
key: K,
) => data.map((item) => item[key]);

const categories = [
{ id: 1, name: "Clothing" },
{ id: 2, name: "Footwear" },
] as const;

const variants = [
{ id: 1, name: "Red - Large" },
{ id: 2, name: "Blue - Medium" },
] as const;

const sizes = [
{ id: 1, label: "Small" },
{ id: 2, label: "Medium" },
] as const;

// Типобезопасно, неизменно и полностью выводится по типам
console.log(mapData(categories, "name")); // ["Clothing", "Footwear"]
console.log(mapData(variants, "name")); // ["Red - Large", "Blue - Medium"]
console.log(mapData(sizes, "label")); // ["Small", "Medium"]


@WebDev_Plus
1
Javascript Tip

Более удобный способ найти элемент с конца массива

Чистый и быстрый способ найти элемент с конца массива — использовать метод findLast().

const logs = [
{ category: 'error', description: 'Error 1', timestamp: 1705276800000 },
{ category: 'warning', description: 'Warning 1', timestamp: 1705363200000 },
{ category: 'error', description: 'Error 2', timestamp: 1705449600000 },
{ category: 'info', description: 'Info 1', timestamp: 1707523200000 },
];

const lastError = logs.findLast(log => log.category === 'error');
console.log(lastError);
// 👉 { category: 'error', description: 'Error 2', timestamp: 1705449600000 }


Если нужен не сам элемент, а индекс, то можно использовать метод findLastIndex().

Оба этих метода поддерживаются всеми популярными браузерами и JS-рантаймами с сентября 2022 года 🎉

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
У тебя сейчас мозг взорвётся.

Кликаешь по компоненту в React, и сразу открывается его код в VS Code

С такой штукой пишешь код заметно быстрее

@WebDev_Plus
4
Библиотека Javascript для создания потоков данных без зависимостей

https://github.com/jerosoler/Drawflow/

@WebDev_Plus
1
С 34-м днем рождения, HTML-теги.

29 октября 1991 года Тим Бернерс-Ли опубликовал документ под названием HTML Tags.

В нем было описание первых 18 тегов HTML: <title>, <nextid>, <a>, <isindex>, <plaintext>, <listing>, <p>, <h1>…, <address>, <hp1>…, <dl>, <dt>, <dd>, <ul>, <li>, <menu> и <dir>.

@WebDev_Plus
12
This media is not supported in your browser
VIEW IN TELEGRAM
Поймал CORS-ошибку и она тебе всё ломает?
Тебе пригодится один трюк в DevTools.

@WebDev_Plus
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Хотите отображать PDF-файлы на своем веб-сайте? Обратите внимание на это

Работает с React, Svelte, Solid и Vanilla JavaScript.

$ npm install @pdfslick/react


@WebDev_Plus
6😭1
This media is not supported in your browser
VIEW IN TELEGRAM
Мой любимый терминал — Warp. Я до сих пор нахожу в нём мелкие фишки, которые помогают работать быстрее. Знал, что там есть встроенный файловый менеджер?

@WebDev_Plus
2
Вот небольшой совет, не про Angular.

Не обязательно держать submit/reset кнопки прямо внутри формы. Можно повесить на кнопку атрибут form.
Этот атрибут связывает кнопку с нужной формой, и тогда её можно разместить где угодно в документе, независимо от её позиции.

Надеюсь, пригодится.

@WebDev_Plus
1👍1
Array.with() для аккуратных неизменяемых обновлений

@WebDev_Plus
1
Разработчик экспериментирует с HTMX и нашёл способ комбинировать JSX, TypeScript и кастомные HTML-элементы… без привычной фронтовой сборки. Стили и небольшой клиентский код он просто инлайнит прямо с сервера. Звучит странновато, но есть плюсы: всё лежит рядом, не нужно возиться с бандлерами, а работа идёт быстрее.

Фокус в одном трюке: клиентские функции можно передавать в <script> как есть, забрав их исходник через Function.prototype.toString(). То же работает и для CSS. Получается, будто пишешь фронт прямо в браузере, но все плюшки TypeScript и JSX получаешь на сервере.

Метод, конечно, не для гигантских приложений. Но для маленьких виджетов, кастомных элементов или отдельных фич без тонны зависимостей — вполне себе вариант. Минификацию можно отдать CDN или вообще забить, если кода немного. С внешними библиотеками помогут import maps.

Автор задумки признаёт: это не серебряная пуля. Просто ещё один инструмент, который делает разработку чуть приятнее, когда он уместен.

@WebDev_Plus
4
This media is not supported in your browser
VIEW IN TELEGRAM
Свежак в ChromeDevTools! Отладка полной performance-трейсы с помощью Gemini.

Записал трейс, а дальше просто общаешься с Gemini про весь этот трейс: связанные Performance Insights и даже данные из поля. И главное.. не надо заранее выделять контекст, Gemini сам разберется

@WebDev_Plus
1😁1
Менять HTML на лету еще никогда не было так просто.

Bun HTMLRewriter API дает низкоуровневый контроль для парсинга, модификации и улучшения HTML через CSS-селекторы, и все это на бешеной скорости. Реализация в Bun основана на Cloudflare lol-html.

Можно переписывать контент из строк, Blob, ArrayBuffer, файлов или даже HTTP-ответов. Есть тонкое управление элементами, текстовыми нодами и комментариями. Идеально, когда нужно подправить HTML прямо в процессе обработки.

@WebDev_Plus
2