
Por muitos anos, fui assombrado por essa coceira - tentando encontrar o editor de texto “perfeito” para colaboração. Mas não apenas qualquer editor de texto que ofereça suporte à colaboração, oh não, minha tarefa é encontrar (bem, pelo menos procurar)
editores de texto abertos com trabalho em grupo em tempo real (ou seja, não apenas texto simples, mas também conteúdo estruturado). Portanto, o foco deste artigo é uma categoria bastante específica de ferramentas de código aberto e as tecnologias em que eles são executados. Se seus interesses forem maiores, consulte esta
lista de editores constantemente atualizada .
Então Pulei de um penhasco muitas vezes e mergulhei em um mar quase interminável de programas de colaboração em tempo real. Voando para baixo, este mergulho revigorante no fundo da piscina, eu já sei bem. Geralmente começa com alguma excitação e surpresa inicial (
salto ) em novas tecnologias e pesquisas de baixo nível, depois surge um sentimento de congestão e um desejo de emergir (
ei, bem profundo aqui ) e explorar a parte aplicada, e depois o período em que meus pensamentos são melhor descritos com a frase: "Eu sou realmente tão estúpido por isso?" (provavelmente), porque geralmente a documentação, a demonstração e o código não correspondem nem fazem sentido, o componente de colaboração no servidor não inicia e há situações limítrofes quando mais de dois usuários inserem a mesma palavra e ... tudo termina (
surgiram, ofegando por ar ).
Depois disso, é difícil retomar o assunto, o próximo estágio é uma espécie de inverno de reflexão, em uma broca, à espera de um clima severo, quando geralmente deixo o código semi-acabado funcionar por meses ... ou anos.
Até nos encontrarmos novamente, um tipo de dados replicado sem conflito!
Fig. 1. SaltoO fato é que, em 2017, fiquei tão empolgado com as perspectivas de um algoritmo (uma espécie de
CRDT ) descrito em um
artigo de pesquisa que passei vários dias e o implementei
em JavaScript , apenas para descobrir que há uma situação limítrofe no artigo científico para o qual nenhuma solução é dada (bem ... mas talvez seja a mesma coisa?). Naquela época, eu me virei para o autor, mas não recebi uma resposta, e descobri que essa situação de fronteira em particular foi considerada em um algoritmo semelhante por outra equipe, mas que inferno, por causa dessas sutilezas na implementação, talvez eu pudesse transferi-lo para o Lisp ... SO PARE! O que está acontecendo aqui? Obviamente, não quero introduzir um novo algoritmo a partir de trabalhos de pesquisa e resolver seus problemas! O que estou fazendo, como cheguei aqui?
Vamos voltar!O que eu (e provavelmente você também, caro leitor) realmente precisa é de um
editor plug-and-play, um produto acabado . O que resolve o problema da colaboração em tempo real. O que permite a vários usuários conectados, a milhares de quilômetros de distância, editar um documento estruturado pressionando as teclas nos teclados e ver as alterações um do outro em suas telas. Isso é tudo.
No entanto, os editores são difíceis ... e eu simplesmente não consegui encontrar essa ferramenta.
Até agora.
Chegou o ano de 2019 (a
coceira voltou com força ), e desta vez não apenas o editor de mágica apareceu, mas, na verdade, até
dois candidatos a cumprir a tão esperada especificação. Inicialmente, eu queria passar por cima do campo com você e listar quase todos os editores de texto para colaboração, mas isso
não parece agregar muito valor . Em vez disso, vamos nos concentrar em dois editores que podem se tornar "desse jeito".
Mas existem dois editores, e você precisa fazer uma escolha - seria bom considerar objetivamente qual é o mais adequado. Ofereço um sistema de classificação profundamente científico com as seguintes categorias (usando o kiwi como uma unidade padrão do bem):
- Licença Aberta : Adiciona 1 Kiwi
(este também é um critério de exclusão)
- Suporte de imagem: Adiciona 1 Kiwi

- Suporte de mesa : Adiciona 1 Kiwi

- Suporte da lista : Adiciona 1 Kiwi

- Suporte de matemática : Adiciona 1 Kiwi

- Suporte de colaboração em tempo real : adiciona 1 Kiwi

- Componentes de servidor disponíveis: 1 kiwi

- Suporte para cursor remoto e destaque: 1 Kiwi
(ou seja, você pode ver os cursores de outros usuários)
- Trabalhar offline : 1 kiwi
(é muito difícil de determinar)
- Experiência de produção: 1 Kiwi

- Suporte móvel : 1 Kiwi

Com esse sistema de pontuação, o editor pode obter no máximo 11 unidades de kiwi. Vamos começar!
Ckeditor 5
Figura 2. Interface do CKEditor 5 (uma das opções possíveis), origemVamos começar com o CKEditor 5, a versão mais recente de uma
grande linha de editores de qualidade . Ele é lindo Eu sei, eu sei que isso não é um critério, e isso realmente não importa (e talvez nem concordemos), mas eu apenas tinha que dizer sobre a sua beleza. Portanto, este editor usa muito kiwi: é licenciado sob a GPL (
alguma discussão sobre as limitações aqui ), (+1), suporta imagens, tabelas, listas (+3), a matemática é suportada pelo plug-in (+1) e também suporta
colaboração em tempo real tempo com o cursor e as seleções excluídos (+2). Os criadores do CKEditor escreveram um
post incrível e
detalhado sobre como o desenvolveram usando transformações operacionais.
No entanto, não
consegui encontrar a implementação do servidor necessária para a colaboração em tempo real, e toda a documentação aponta para a necessidade obrigatória de seu serviço em nuvem e componente (pago), mesmo em projetos compatíveis com a GPL.
É difícil determinar o nível de suporte offline , mas parece que ele não está completamente completo (por exemplo, o editor pode suportar uma conexão brevemente interrompida, mas não por vários dias trabalhando offline). Provavelmente metade de um kiwi? O mesmo se aplica ao suporte móvel, também há trabalho no suporte completo (+0,5). E no último momento, o CKEditor certamente é usado na produção, mas não consegui encontrar uma lista de produtos com base nele (+0,5).
Um bom editor, mas a falta de um servidor de colaboração de código aberto acessível é realmente deprimente.
Avaliação completa: 8.5 / 11









Atlaskit Editor
Fig. 3. Editor do Atlaskit da AtlassianHá cerca de um ano, a Atlassian lançou o sistema
Atlaskit Design de código aberto, e
muitos benefícios vieram com ele, incluindo um editor completo e pronto para uso, baseado no
ProseMirror .
Eu já sinto que este pode ser o editor que estávamos procurando! É liberado sob a licença Apache 2.0, de acordo com muitos, como uma
licença de código aberto muito permissiva (+1 kiwi). Ele não apenas suporta imagens, tabelas e listas, mas também os suporta excepcionalmente bem (+3 kiwi)! A implementação das tabelas, que falta muito para a maioria dos editores, é excelente aqui:
Fig. 4. Gerenciando tabelas no Atlaskit EditorInfelizmente, a matemática não é suportada, mas o próprio editor é baseado no ProseMirror, portanto, não deve ser um problema adicionar uma solução existente (+0,5) a ela. Definitivamente, suporta colaboração em tempo real com cursores e seleções remotas (+2), este é um dos melhores exemplos de interface do usuário que eu já vi (por exemplo, cursores remotos ficam escuros se sobrepostos aos seus e outros ótimos detalhes de implementação ) Além disso, nos meus testes, o suporte offline parece muito sólido (+1) - provavelmente devido à
abordagem de “competência central” que o ProseMirror usa para colaboração . Uau, já chegamos a 7,5 kiwi e muitos mais pontos! Vá em frente!
Infelizmente, é aqui que nos deparamos com uma dura realidade. Como o CKEditor, não há implementação do lado do servidor disponível para colaboração em tempo real. Pessoas preguiçosas. Que chatice grande. Gostaria de saber se isso pode ser corrigido? ..
De qualquer forma, se você continuar a descer de acordo com os critérios, todo o resto vale o qiwi: é definitivamente usado na produção (milhões de usuários) e possui suporte móvel (+2). No momento em que eu estava prestes a anunciar o vencedor (um total de 9,5 kiwi) e publicar este post, surgiu outra coisa. Acontece que os logotipos e emblemas usados no editor e em muitos outros componentes do Atlaskit são licenciados sob a
licença ADG muito restritiva, que afirma que você não pode usá-los fora do universo Atlassian. No entanto, os mesmos ícones são amplamente utilizados e fortemente integrados ao editor. Principal chatice número dois, e eu pego o kiwi deles. Retornamos para 8,5 e, se você estiver contando, verá que o resultado agora é o mesmo. E ele é final.
Agora, se você pudesse fazer algo com esses ícones ...Eu pensei que, depois de todos os recentes avanços nos editores de texto on-line, seria muito triste ficar com dois ótimos editores com recursos incríveis que você ainda não pode usar em projetos de código aberto - devido a problemas de licenciamento, falta de blocos de construção acessíveis ou isso e outro.
Portanto, primeiro desenvolvi o lado do servidor (com base no PostgreSQL, framework PubSweet e mix REST / WebSockets), o código está disponível
aqui . É bastante simples, mas faz seu trabalho e garante a persistência dos documentos e do canal de comunicação em tempo real. Surpreendentemente, graças à enorme comunidade ProseMirror, consegui descobrir como tudo deveria funcionar sem ter uma especificação exata da interface (+1 kiwi).
E então
substituí os ícones usados pelo editor pelos ícones do
conjunto Feather . Em particular, três pacotes tiveram que ser substituídos. Como a licença ADG, entre outras coisas, proíbe qualquer trabalho derivado, esses pacotes tiveram que ser refeitos do zero. Provavelmente, por causa disso, algumas funções foram perdidas, principalmente do ponto de vista da acessibilidade para pessoas com deficiência, mas uma boa base aberta foi criada para um maior desenvolvimento. Por exemplo,
em alguns casos, não há alternativas melhores para os ícones ; portanto, se você quiser contribuir com este projeto, aqui está o primeiro problema (+1 kiwi)!
Tudo isso significa que agora somos apenas meio qiwi do resultado perfeito (mas é provável que consigamos lidar com a matemática). O que aconteceu foi o que eu não acreditava quando comecei essa jornada. Isso também significa que temos um vencedor claro nesta batalha e, finalmente, o Atlaskit Editor venceu
graças à comunidade ProseMirror diversa, aberta e útil . Confira a
documentação do
projeto para obter instruções sobre por onde começar. Acredito que se você está iniciando um novo projeto e está considerando a possibilidade de cooperação em tempo real, este é um ótimo lugar para começar, mesmo com todas as
ressalvas .
Fig. 5. Demonstre recursos de edição em tempo real no Atlaskit EditorResultado final (corrigido): 10.5 / 11











Menção Honrosa
Gostaria de mencionar dois editores, embora, no momento, eles não tenham uma solução pronta para colaboração em tempo real, mas ambos sejam criados sobre bibliotecas que suportam essa funcionalidade. Talvez ambos tenham planos.
Fig. 6. Editor de cera (processador de texto baseado em ProseMirror)A primeira é a
cera (batizada em homenagem a comprimidos de cera antigos) da Fundação Coko. Este
processador de texto foi criado pela primeira vez na biblioteca de
substâncias (
repositório ) e agora foi reconstruído no
ProseMirror (
repositório ). É embalado exclusivamente com funcionalidade. Essas não são exatamente as funções para as quais damos kiwi, mas, no entanto, são excelentes funções. O Wax foi originalmente construído para
escrever livros , suporta notas (anotações numeradas comuns em livros), histórico de alterações, pesquisa e substituição, ornamentos e outros. Talvez dê laranjas para isso

? Nesse caso, a Wax receberá 4 kiwis (licença aberta, imagens, listas, uso na produção) e duas laranjas, possivelmente quatro.








. Isso é muita fruta!
Textura
Fig. 7. Editor de texturas e substânciasPor fim, temos o
Texture , um editor profissional muito específico (mas de código aberto) para criar conteúdo científico no formato JATS (padrão XML para artigos de periódicos). Se você pratica a contagem de frutas, certamente ficaremos sem dedos: uma licença aberta, tabelas, imagens, suporte matemático profundo, links e referências cruzadas, listas, suporte a metadados, a lista continua!



Repito,
tanto o Wax quanto o Texture são editores maravilhosos , e a única coisa que os impede da quantidade máxima de kiwi é a falta de recursos de co-edição em tempo real, aos quais este artigo é dedicado.
Conclusão
Se você estiver criando um sistema no qual a edição colaborativa em tempo real é um componente-chave, você escolheu a hora certa. No ano passado, o cenário amadureceu e agora surgiram soluções
quase plug-and-play abertas aqui. Talvez, com a sua ajuda, exatamente em um ano teremos todo um conjunto de projetos abertos. E talvez, somente possível, também usaremos ferramentas criadas sobre essas camadas abertas, sem nem mesmo saber sobre isso.
Leitura adicional
- Dados com infusão de histórico: árvores causais e CRDTs operacionais
- Lições da criação de um editor de texto em tempo real
- Exemplo de processador de texto HTML
- Co-edição no ProseMirror