
Draft.js
et l'utopie du traitement de texte sur le web

React
Nantes

@florentduveau
artisan JavaScript
@kisskissbankbank
TL;TR
Utilisez le <textarea> tant que vous pouvez

Word-like
CKEditor \o/

LOOOUUURRRD



HTML / designMode
HTML / contentEditable
execCommand / queryCommandState

<strong> ou <b> ?
La réponse est :

source : https://developer.mozilla.org/fr/docs/Web/API/Document/execCommand




NO SPEC !!!





IE 5.5
1999

2005

Anne van Kesteren
[...] Ian tracked me down and put me on on debugging contentEditable in Internet Explorer. Quite cool.
Except for the fact that IE is horribly broken. Totally, utterly, completely broken.
Or rather, it works, but it is messy as hell. [...]


2004
Ian Hickson

Aryeh Gregor
Début du travail d'écriture
d'un standard (WIP)
2010/2011

2014
The Editing Task Force

2019


Standardisons !
#FAIL

Pourquoi est-ce si dur ?
contentEditable /execCommand
- Pas de Spec à la base ! (Draft)
- API non fiable
- API non extensible
- Scope énorme (selection, keyboard, style, undo/redo...)
- Assurer une rétro-compatibilité (20 ans !)
Mais comment font-ils ?
CKeditor / TinyMCE / ...

- On garde contentEditable (trop compliqué à réécrire)
- On surcharge (et on étend) toute l'API d'execCommand

La Next Generation

Trix
ProseMirror

wysiwyg
Rich Text Editor

contentEditable comme input


DOM
Data Model

Draft.js
Rich Text Editor...

pour React
2016 par Facebook


Le DataModel Draft.js
Chaque modification créé une nouvelle copie de l'EditorState
Voici un texte
Je l'ai écrit avec Draft.js
EditorState
-
ContentState
-
Blocks[]
- Type
- InlineStyle[]
- Entity
-
Blocks[]
- SelectionState
H1
P
#ReactNantes
P


Blocks
Styles
-
ITALIC
-
BOLD
-
UNDERLINE
-
CODE

Draft.js c'est
-
Une API bas niveau (extensible)
-
Un Rich Text Editor boosté par React

Les
Tout ce que j'ai dis avant..
- API pas totalement mature
- Doc très moyenne
- Encore en beta (v0.10.5)
- Immutable.JS ?!
- Pas de système simple de plugin
- Open-source (15 000)
- Projet actif
- Extensible à (presque) l'infini
- React

Draft.js Plugins !







Une trouzaine de Rich Text Editor basés sur Draft.js


Des questions ?

Draft_JS
By Florent DUVEAU
Draft_JS
- 1,400