ݺߣ

ݺߣShare a Scribd company logo
Создание

WYSIWYG-редакторов

для веба
25.08.2016
Егор Яковишен

frontend team lead
@yaplusplus
2
3
4
5
6
7
8
9
10
What You See

is

What You Get
11
FrontPage
CKEditorTinyMCE
RedactorScribe
Aloha EditorTrix
Medium.js Summernote
ProseMirror
Squire
goog.editor
Froala
ContentTools
Draft.js
Проблемы
•What You See !== What You Get
•Грязный HTML-код
•Слишком много инструментов и возможностей
•Разное поведение contenteditable в браузерах
12
13
14
15
16
HTML
The hobbit was a very well-to-do hobbit, and his name was Baggins.

The <a href=”http://en.wikipedia.org/wiki/The_Hobbit">hobbit</a>

was a very well-to-do hobbit,

and his name was <strong><em>Baggins</em></strong>.

<strong><em>Baggins</em></strong>

<em><strong>Baggins</strong></em>

<em><strong>Bagg</strong><strong>ins</strong></em>

<em><strong>Bagg</strong></em><strong><em>ins</em></strong>
17
Задачи
•WYSIWYRG
•Чистый кроссбраузерный HTML
•Гибкая система настроек
•Адаптация под различные устройства и экраны
•Привычный UX: горячие клавиши, контекстное меню,

copy&paste, undo/redo
•Удобен как для редакторов, так и для дизайнеров
18
Архитектура редактора
•Пост
•Контент
•Тема
•Лэйаут
•Инструменты
19
Контент
20
Тема
21
Лэйаут
22
Виртуальный DOM
•На вход получаем DOM Node, HTML или что-то ещё
•Формируем из содержимого поста дерево элементов
•Рендерим пост в любом формате: HTML, Markdown, JSON…
•Удобно для тестирования
23
Виртуальный DOM
HTML
<p class=“style_title”>Заголовок</p>
24
Virtual DOM
Paragraph
• tagName: ‘p’
• attributes:
• className: ‘style_title’
• content: ‘Заголовок’
Инкапсуляция стилей
•БЭМ-нотация
•Локальная очистка стилей
•Уникальные классы для каждого стиля:



stk-theme_village-2016__bigtitle



stk-theme_village-2016__mb2
25
Очистка HTML
26
Вставка эмбедов
27
28
Copy&Paste
29
30
31
Копирование в Trello
32
Копирование в Trello
33
Copy&Paste
•onBeforeCopy
•onBeforeCut
34
Undo / Redo
35
36
Undo / Redo
Сохранение Editor State при каждом действии пользователя:
•контент
•выделенный элемент (один или несколько)
•положение курсора в тексте
•тема, лэйаут
37
Модульные flex-сетки
38
39
Desktop & Mobile preview
40
41
42
Инструменты
ContentEdit
43
Цифры
•91 модуль
•~330 КБ minified
•~15 000 строк кода
•4,5 месяца работы
•3 внедрения
•> 20 млн просмотров в месяц
•Время сборки поста: 10-60 минут
44
45
Wordpress
Егор Яковишен
FRONT-END TEAM LEAD
yakovishen@setka.io

@yaplusplus

More Related Content

Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33