TGViewer
Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js @frontendproglib · 20.9K subscribers
Post #8301 1.7K
🤩 А что, если написать свой текстовый редактор?

«VS Code слишком тяжёлый. Сделаю свой редактор!»


— примерно так начался эксперимент одного разработчика.

🔘 Первый вариант — всё рисовать через <canvas>. Курсор, текст, подсветка строки, ввод с клавиатуры — работает. Но почти всё приходится реализовывать самостоятельно:


canvas.addEventListener("pointerdown", positionCursor);
document.addEventListener("keydown", moveCursor);


И быстро выясняется проблема: canvas ничего не знает о тексте. Нет нормального выделения, undo/redo, скроллинга и доступности.

🔘 Тогда появляется идея использовать contenteditable:


<div
contenteditable="plaintext-only"
autocapitalize="off"
autocorrect="off"
spellcheck="false"
translate="no">
</div>


Браузер сразу берёт на себя выделение текста, историю изменений и часть accessibility. Но на больших текстах производительность становится непредсказуемой.

🔘 Поэтому следующий кандидат — обычный <textarea>:


<textarea
autocapitalize="off"
autocorrect="off"
spellcheck="false">
</textarea>


И неожиданно он оказывается лучшим вариантом для длинных файлов. Правда, синтаксическую подсветку приходится строить отдельным слоем поверх текста.

📍 А потом начинается самое интересное: Unicode.


"🍋‍🟩".length;
// 5

[..."🍋‍🟩"].length;
// 3

const segmenter = new Intl.Segmenter("en", {
granularity: "grapheme"
});

[...segmenter.segment("🍋‍🟩")].length;
// 1


Один визуальный символ может состоять из нескольких UTF-16 code units и нескольких Unicode code points.

В итоге автор получил редактор, который выглядит примерно на 90% готовым, но имеет лишь 1% возможностей настоящего редактора.
И именно оставшиеся 10% — выделение, виртуализация, подсветка, табуляция, скроллинг, Unicode и accessibility — превращают «простой текстовый редактор» в огромный проект.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#under_hood
  • 🤔 7
  • 😁 3
  • ❤ 2
  • 🥰 2
  • 💯 1
More from @frontendproglib
  1. Sep 20, 2026🤔 Вопрос с собеседования Что выведет этот код? ❤️ — undefined 🔥 — "Alex" 👍 — "Max" 🤔 —…
  2. Sep 19, 2026📍 Навигация: [Вакансии] 🐸 Библиотека фронтендера #pixel_pause
  3. Sep 18, 2026🤔 Вопрос с собеседования Что выведет этот код? ❤️ — 42 и 42 🔥 — 42 и undefined 👍 — unde…
  4. Sep 17, 2026📎 Шпаргалка по фронтенду Этот документ объединяет ключевые темы, техники и механизмы, кот…
  5. Sep 16, 2026💛 Шрифт, который превращает текст в графики Datatype — необычный шрифт из Google Fonts, к…
  6. Sep 15, 2026⭐️ Шпаргалка по Grid alignment Если вы хоть раз путались между justify-* и align-* — вы не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →