Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico...

29
Edição de Texto Rico na web usando estruturas de dados imutáveis Guilherme Vierno

Transcript of Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico...

Page 1: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Edição de Texto Rico na web usando estruturas

de dados imutáveisGuilherme Vierno

Page 2: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

about:meBacharel em FísicaFull stack devMineiro morando no RioDesenvolvedor na

Plataformas serverlessmegadraft.io

Page 3: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Editores de texto rico na Web

Page 4: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Editores de texto rico

Servem para:• Mudar a aparência do texto (negrito, itálico, etc)• Adicionar mídias, como imagens e vídeos• Criar relações entre conteúdos através de links• …

Sem editar HTML na mão…

Page 5: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Old SchoolCKEditor (CKEditor.com)

Imagem de: https://www.turnkeylinux.org/blog/tinymce-vs-ckeditor

Page 6: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Old SchoolTinyMCE (https://www.tinymce.com)

Imagem de: https://www.turnkeylinux.org/blog/tinymce-vs-ckeditor

Page 7: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

• São feios• State == HTML/DOM• Copiar & Colar • Desfazer/Refazer• Crossbrowser

Pobremas

Page 8: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

New School

Page 9: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

New School

Page 10: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

New School

Page 11: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Edição de texto com draft.js e Immutable.js

Page 12: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Draft.jsO Draft.js é um framework construído pelo Facebook usando React, que usa um modelo imutável e facilita a construção de editores de texto rico, abstraindo as diferenças entre os navegadores

Open SourceSem interface, é um framework, não um editorCustomizávelControle estrito do conteúdo (ContentEditable + React)Controle estrito do cursor (Selection API)

Page 13: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Estado

O estado do editor é composto por dois sub-estados imutáveis:

• EditorState• ContentState• SelectionState

Page 14: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

EstadoConteúdo controlado através do estado imutável

Map { content: List [ Map { "text": "lorem ipsum" } ], selection: Map { start: 6, end: 6, block: 0 } }

ENTER

Page 15: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

ModifiersFunções puras na forma: modifier(state) => newState

Map { content: List [ Map { "text": “lorem ipsum" }, Map { "text": "ipsum" } ], selection: Map { start: 0, end: 0, block: 1 } }

SplitBlock

SetSelection

Page 16: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Undo / RedoMap { content: List [ Map { "text": “lorem" }, Map { "text": "ipsum" } ], selection: Map { start: 0, end: 0, block: 1 } }

Map { content: List [ { "text": "lorem ipsum" } ], selection: Map { start: 6, end: 6, block: 0 } }

Page 17: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Serialização

Converter o estado para JSON

const content = convertFromRaw(rawState) const EditorState = EditorState.createWithContent(state)

const rawState = convertToRaw(contentState)

Criar o estado a partir de JSON

Page 18: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": {}, "blocks": [ { "key": "ag6qs", "text": "", "type": "unstyled", "depth": 0, "inlineStyleRanges": [], "entityRanges": [], "data": {} } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14

ContentState

Page 19: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": {}, "blocks": [ { "key": "ag6qs", "text": "megadraft", "type": "unstyled", "inlineStyleRanges": [], }, { "key": "dg2bk", "text": "rock'n'roll", "type": "unstyled", "inlineStyleRanges": [], } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17

Blocks

Page 20: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": {}, "blocks": [ { "key": "ag6qs", "text": "rock n roll", "type": "unstyled", "inlineStyleRanges": [ { "offset": 7, "length": 4, "style": "BOLD" } ] } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17

inlineStyleRanges

Page 21: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": { "0": { "type": "LINK", "mutability": "MUTABLE", "data": { "url": "https://megadraft.io/LICENSE" } } }, "blocks": [ { "text": "Megadraft is MIT licensed”, "entityRanges": [ { "offset": 13, "length": 3, "key": 0 } ] } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23

Entity

Page 22: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": {}, "blocks": [ { "key": "ag6qs", "text": "Lorem ipsum", "type": "ordered-list-item", "depth": 0, }, { "key": "1pdm1", "text": "A nice default base of plugins", "type": "ordered-list-item", "depth": 1, } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17

depth

Page 23: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

{ "entityMap": {}, "blocks": [ { "key": "ag6qs", "type": "image", "data": { "url": "http://example.com/image.jpg", "credits": "My credits", "legend": "Legendary", "height": 1920, "width": 1080, "left": 0, "top": 0, "type": "image/jpeg", } } ] }

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

data

Page 24: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

• blockRenderMap (mapeia tipos de blocos para tags HTML)

• blockRenderFn (renderiza um block qualquer)• blockStyleFn (className dos blocks)• decorators (envolve texto em um componente)• customStyleMap (define o estilo de um estilo

inline)• …

Customização

Page 25: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

megadraft.io

Page 26: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Megadraft

Page 27: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

MegadraftO Megadraft é um editor de texto rico construído com os frameworks Draft.js e React.

• Boa usabilidade• Extensibilidade através de plugins• Open Source & MIT

Page 28: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

Considerações Finais• O mundo multi-device nos fez repensar

como lidamos com conteúdo textual

• Consultas, agregações e estatísticas do conteúdo direto no banco

• Uma renderização “simples” de conteúdo dá muito mais trabalho

Page 29: Edição de Texto Rico na web usando estruturas de …...2019/05/17  · Editores de texto rico Servem para: • Mudar a aparência do texto (negrito, itálico, etc) • Adicionar

que os deuses do heavy metal estejam com vocês

Obrigado!

Guilherme Vierno

vierno.com.br megadraft.io

We are hiring! talentos.globo.com

opensource.globo.com