Editores de texto gratuitos para colaboración



Durante muchos años me obsesionó esta picazón, tratando de encontrar el editor de texto "perfecto" para la colaboración. Pero no cualquier editor de texto que sea compatible con la colaboración, oh no, mi tarea es encontrar (bueno, al menos buscar) editores de texto abiertos con trabajo grupal en tiempo real (es decir, no solo texto plano, sino también contenido estructurado). Por lo tanto, el enfoque de este artículo está en una categoría bastante específica de herramientas de código abierto y las tecnologías con las que se ejecutan. Si sus intereses son más amplios, puede consultar esta lista de editores constantemente actualizada .

Entonces Salté de un acantilado muchas veces y me sumergí en un mar casi interminable de programas de colaboración en tiempo real. Volando hacia abajo, esta inmersión estimulante al fondo de la piscina, ya lo sé bien. Por lo general, comienza con un poco de emoción inicial y sorpresa ( salto ) en las nuevas tecnologías e investigaciones de bajo nivel, luego viene una sensación de congestión y un deseo de emerger ( hey, bastante profundo aquí ) y explorar la parte aplicada, y luego el período en que mis pensamientos se describen mejor con la frase: "¿Soy realmente tan estúpido por esto?" (bastante probable), porque generalmente la documentación, la demostración y el código no coinciden ni tienen sentido, el componente de colaboración en el servidor no se inicia y hay situaciones límite cuando más de dos usuarios ingresan la misma palabra, y ... todo termina ( superficie, jadeando por aire ).

Después de eso, es difícil volver a plantear el tema, la siguiente etapa es una especie de invierno de pensamiento, en un simulacro, esperando un clima severo, cuando generalmente dejo que el código semiacabado funcione durante meses ... o años. Hasta que nos volvamos a encontrar, ¡un tipo de datos replicados sin conflictos!


Fig. 1. Salto

El hecho es que en 2017 estaba tan entusiasmado con las perspectivas de un algoritmo (una especie de CRDT ) descrito en un artículo de investigación que pasé varios días y lo implementé en JavaScript , solo para descubrir que existe una situación límite en el artículo científico para el cual no se da ninguna solución (bueno ... pero tal vez todo lo mismo?). En ese momento, recurrí al autor, pero no recibí una respuesta, y descubrí que esta situación fronteriza particular era considerada en un algoritmo similar por otro equipo, pero demonios, debido a estas sutilezas en la implementación, tal vez podría transferirla a Lisp ... SO ¡ALTO! ¿Qué está pasando aquí? ¡Por supuesto, no quiero introducir un nuevo algoritmo del trabajo de investigación y solucionar sus problemas! ¿Qué estoy haciendo, cómo llegué aquí? ¡Retrocedamos!

Lo que yo (y probablemente tú también, querido lector) realmente necesito es un editor plug-and-play, un producto terminado . Lo que resuelve el problema de la colaboración en tiempo real. Lo que permite a varios usuarios conectados, a miles de kilómetros de distancia, editar un documento estructurado presionando las teclas en los teclados y ver los cambios de cada uno en sus pantallas. Eso es todo Sin embargo, los editores son difíciles ... y simplemente no pude encontrar esa herramienta.

Hasta ahora

Ha llegado el año 2019 (la picazón ha regresado con fuerza ), y esta vez no solo apareció el editor de magia, sino que incluso dos solicitantes para cumplir con la esperada especificación. Inicialmente, quería volar sobre el campo con usted y enumerar casi todos los editores de texto para la colaboración, pero no parece agregar mucho valor . En cambio, centrémonos en dos editores que pueden convertirse en "de esa manera".

Pero hay dos editores, y debe elegir: sería bueno considerar objetivamente cuál es el más adecuado. Ofrezco un sistema de clasificación profundamente científico con las siguientes categorías (usando el kiwi como una unidad estándar de bien):

  1. Licencia abierta : Agrega 1 Kiwi (este también es un criterio de exclusión)
  2. Soporte de imagen : Agrega 1 Kiwi
  3. Soporte de mesa : Agrega 1 Kiwi
  4. Soporte de lista : Agrega 1 Kiwi
  5. Soporte de Matemáticas : Agrega 1 Kiwi
  6. Soporte de colaboración en tiempo real : Agrega 1 Kiwi
  7. Componentes disponibles del servidor : 1 kiwi
  8. Cursor remoto y soporte de resaltado: 1 Kiwi (es decir, puede ver los cursores de otros usuarios)
  9. Trabajar sin conexión : 1 kiwi (es bastante difícil de determinar)
  10. Experiencia de producción: 1 Kiwi
  11. Soporte móvil : 1 Kiwi

Con dicho sistema de puntuación, el editor puede obtener un máximo de 11 unidades de kiwi de bien. ¡Empecemos!

Ckeditor 5



Figura 2. Interfaz CKEditor 5 (una de las opciones posibles), fuente

Comencemos con CKEditor 5, la última versión de una gran línea de editores de calidad . El es hermoso. Lo sé, sé que este no es un criterio, y realmente no importa (y tal vez ni siquiera estemos de acuerdo), pero solo tenía que decir sobre su belleza. Entonces, este editor requiere mucho kiwi: está licenciado bajo la GPL (aquí se discuten las limitaciones ), (+1), admite imágenes, tablas, listas (+3), el complemento admite matemáticas (+1) y también admite colaboración en tiempo real tiempo con el cursor eliminado y las selecciones (+2). Los creadores de CKEditor escribieron una publicación de blog increíble y detallada sobre cómo lo desarrollaron utilizando transformaciones operativas.

Sin embargo, no pude encontrar la implementación de servidor necesaria para la colaboración en tiempo real, y toda la documentación indica la necesidad obligatoria de su servicio en la nube y componente (pago), incluso en proyectos compatibles con la GPL.

El nivel de soporte fuera de línea es difícil de determinar , pero parece que no está completamente completo (por ejemplo, el editor puede soportar una conexión interrumpida brevemente, pero no durante varios días de trabajo sin conexión). ¿Probablemente la mitad de un kiwi? Lo mismo se aplica al soporte móvil, también hay trabajo en soporte completo (+0.5). Y en el último momento, CKEditor ciertamente se usa en la producción, pero no pude encontrar una lista de productos basados ​​en él (+0.5).

Un buen editor, pero la falta de un servidor de colaboración de código abierto asequible es realmente deprimente.

Calificación completa: 8.5 / 11

Atlaskit Editor



Fig. 3. Atlaskit Editor por Atlassian

Hace aproximadamente un año, Atlassian lanzó el sistema de diseño Atlaskit de código abierto, y un montón de cosas buenas vinieron con él, incluido un editor completo y listo para usar basado en ProseMirror . ¡Ya siento que este puede ser el editor que estábamos buscando! Se publica bajo la licencia Apache 2.0, según muchos, como una licencia de código abierto muy permisiva (+1 kiwi). ¡No solo admite imágenes, tablas y listas, sino que también las admite excepcionalmente bien (+3 kiwi)! La implementación de las tablas, que es muy deficiente para la mayoría de los editores, es excelente aquí:


Fig. 4. Gestionar tablas en Atlaskit Editor

Desafortunadamente, las matemáticas no son compatibles, pero el editor en sí está basado en ProseMirror, por lo que no debería ser un problema agregarle una solución existente (+0.5). Definitivamente es compatible con la colaboración en tiempo real con cursores y selecciones remotas (+2), este es uno de los mejores ejemplos de IU del soporte que he visto (por ejemplo, los cursores remotos se oscurecen si se superponen con los suyos y otros detalles de implementación excelentes ) Además, según mis pruebas, el soporte fuera de línea parece muy sólido (+1), probablemente debido al enfoque de "competencia central" que ProseMirror usa para la colaboración . ¡Guau, ya llegamos a 7.5 kiwi y muchos puntos más! ¡Adelante!

Desafortunadamente, es aquí donde nos enfrentamos a una dura realidad. Al igual que CKEditor, no hay una implementación del lado del servidor disponible para la colaboración en tiempo real. La gente perezosa. Gran fastidio. Me pregunto si esto se puede solucionar.

En cualquier caso, si continúa descendiendo de acuerdo con los criterios, todo lo demás vale la pena el qiwi: definitivamente se usa en producción (millones de usuarios) y tiene soporte móvil (+2). Justo cuando estaba a punto de anunciar al ganador (un total de 9.5 kiwi) y publicar esta publicación, surgió algo más. Resulta que los logotipos e insignias utilizados en el editor y muchos otros componentes de Atlaskit tienen licencia bajo la muy restrictiva licencia ADG , que establece que no puede usarlos fuera del universo Atlassian. Sin embargo, los mismos íconos se usan ampliamente y están estrechamente integrados en el editor. Mayor fastidio número dos, y les quito el kiwi. Regresamos a 8.5, y si está contando, verá que el resultado ahora es el mismo. Y él es final.

Ahora, si pudieras hacer algo con estos íconos ...

Pensé que después de todos los avances recientes en editores de texto en línea, sería muy triste quedarse con dos editores geniales con características sorprendentes que aún no puede usar en proyectos de código abierto, ya sea debido a problemas de licencia, falta de bloques de construcción accesibles o tanto eso como otro.

Por lo tanto, primero desarrollé el lado del servidor (basado en PostgreSQL, el marco PubSweet y la mezcla REST / WebSockets), el código está disponible aquí . Es bastante simple, pero hace su trabajo y garantiza la persistencia de los documentos y el canal de comunicación en tiempo real. Sorprendentemente, gracias a la gran comunidad de ProseMirror, pude descubrir cómo debería funcionar todo sin tener una especificación de interfaz exacta (+1 kiwi).

Y luego reemplacé los iconos utilizados por el editor con los iconos del conjunto Feather . En particular, tres paquetes tuvieron que ser reemplazados. Dado que la licencia ADG, entre otras cosas, prohíbe cualquier trabajo derivado, estos paquetes tuvieron que rehacerse desde cero. Probablemente, debido a esto, se perdieron algunas funciones, principalmente desde el punto de vista de la accesibilidad para las personas con discapacidad, pero se creó una buena base abierta para un mayor desarrollo. Por ejemplo, en algunos casos no hay mejores alternativas para los íconos , por lo que si desea contribuir a este proyecto, ¡aquí está el primer problema (+1 kiwi)!

Todo esto significa que ahora solo estamos a medio qiwi del resultado perfecto (pero es probable que podamos hacer frente a las matemáticas). Lo que sucedió fue en lo que no creía cuando comencé este viaje. También significa que tenemos un claro ganador en esta batalla y, en última instancia, Atlaskit Editor ganó gracias a la comunidad diversa, abierta y útil de ProseMirror . Consulte la documentación del proyecto para obtener instrucciones sobre dónde comenzar. Creo que si está comenzando un nuevo proyecto y está considerando la posibilidad de cooperación en tiempo real, este es un gran lugar para comenzar, incluso con todas las advertencias .


Fig. 5. Demostrar capacidades de edición en tiempo real en Atlaskit Editor

Resultado final (corregido): 10.5 / 11

Mención de honor


Hay dos editores que me gustaría mencionar, aunque en este momento no tienen una solución preparada para la colaboración en tiempo real, pero ambos están construidos sobre bibliotecas que admiten esta funcionalidad. Quizás ambos tienen planes.


Fig. 6. Editor de cera (procesador de textos basado en ProseMirror)

El primero es Wax (llamado así por las antiguas tabletas de cera) de la Fundación Coko. Este procesador de textos se creó por primera vez en la biblioteca de sustancias ( repositorio ), y ahora se ha reconstruido con ProseMirror ( repositorio ). Se embala exclusivamente con funcionalidad. Estas no son exactamente las funciones para las cuales le damos kiwi, pero sin embargo son funciones excelentes. Wax se creó originalmente para libros de composición tipográfica , admite notas (anotaciones numeradas comunes en los libros), historial de cambios, búsqueda y reemplazo, adornos y otros. Tal vez dar naranjas para eso ? En este caso, Wax recibirá 4 kiwis (licencia abierta, imágenes, listas, uso en producción) y un par de naranjas, posiblemente cuatro. . ¡Esto es mucha fruta!

Textura



Fig. 7. Textura, editor basado en sustancias

Finalmente, tenemos Texture , un editor profesional muy específico (pero de código abierto) para crear contenido científico en formato JATS (estándar XML para artículos de revistas). Si practica el recuento de frutas, es casi seguro que se nos acaben los dedos: una licencia abierta, tablas, imágenes, soporte matemático profundo, enlaces y referencias cruzadas, listas, soporte de metadatos, ¡la lista continúa! Repito, tanto Wax como Texture son editores maravillosos , y lo único que los mantiene alejados de la cantidad máxima de kiwi es la falta de funciones de coedición en tiempo real, a lo que se dedica este artículo.

Conclusión


Si está creando un sistema en el que la edición colaborativa en tiempo real es un componente clave, ha elegido el momento adecuado. El año pasado, el panorama ha madurado, y ahora han aparecido aquí soluciones abiertas casi listas para usar. Quizás, con su ayuda, exactamente en un año tendremos un conjunto completo de proyectos abiertos. Y tal vez, solo sea posible, también usaremos herramientas construidas sobre estas capas abiertas, sin siquiera saberlo.

Lectura adicional


  1. Datos infundidos en la historia: árboles causales y CRDT operativos
  2. Lecciones de crear un editor de texto en tiempo real
  3. Ejemplo de procesador de textos HTML
  4. Coedición en ProseMirror

Source: https://habr.com/ru/post/451204/


All Articles