Подтвердить что ты не робот

Как реализовать текстовый редактор Google doc?

Я открыл документ google, кажется, что google doc - это не просто текстовая область... кажется, что это настраиваемый материал... есть ли какая-нибудь библиотека для такого рода вещей?

4b9b3361

Ответ 1

Большинство редакторов используют свойство contentEditable. Просто установка его на любом элементе HTML позволяет редактировать, копировать и вставлять, проверять орфографию, форматирование и т.д. В современных пользовательских агентах.

Однако, google docs специально не использует contentEditable. Вместо этого они внедрили свой собственный механизм рендеринга в JavaScript. Если вы не планируете проект в масштабе документов Google (т.е. У вас есть, по крайней мере, 3 человека, желающих работать полный рабочий день в механизме рендеринга), contentEditable - это путь.

Ответ 2

новые Документы Google совершенно разные для всего остального, как tinyMCE, ckEditor и similars. Вот статья, описывающая некоторые из технологий, стоящих за ней: http://news.softpedia.com/news/Google-Details-the-Powerful-Technology-Behind-the-New-Docs-Editor-141804.shtml

приведенный в статье: "Чтобы обойти эти проблемы, новый редактор документов Google не использует браузер для редактирования редактируемого текста. Мы написали совершенно новую поверхность для редактирования и компоновки, полностью в JavaScript", Джефф Харрис, менеджер по продуктам, Документы Google.

Удивительно, как нет никакой реализации с открытым исходным кодом, и люди не знают об этом.

Короткий ответ заключается в том, что они реализовали каждую логику, которую будет делать графический текстовый редактор, в простом javascript (от макета, до рендеринга, ко всему остальному).

Ответ 3

Google Wave впервые выработал большинство документов Google, хотя модели совершенно разные. Начните исследования там, так как есть чему поучиться.

Если вы просто пытаетесь сделать что-то более простое, чем структурированные документы, может потребоваться mobwrite, etherpad или одна из его вилок.

Редактор может быть сложным и по существу включает в себя создание целого текстового процессора в javascript. Вот некоторые примеры этого.

С любым редактором у вас есть буфер строки или элемента, который вы должны зеркалировать в реальном времени api по выбору.

Это можно сделать с помощью API реального времени для Google Диска.

События модификации должны обрабатываться в обоих направлениях. Изменения локальной модели распространяются на модель реального времени и наоборот. Модификации локальной модели могут отображаться по мере их возникновения.

Курсоры могут обрабатываться с помощью указателей на исходном буфере, например Index Reference.

Сервер может быть реализован несколькими способами, но для этого потребуется модель операционного преобразования, поддерживающая общие структуры. Сайт протокола Wave имеет пример с использованием xml-модели.

Ответ 4

Ritzy - это новый текстовый редактор с открытым исходным кодом, который содержит настраиваемый механизм обработки и компоновки JavaScript, как Google Docs. Взгляните на это источник для некоторых идей.

Он основан на Facebook React и SwarmJS и предназначен в первую очередь для внедрения в приложениях поддержка расширенного ввода текста в режиме реального времени.

Насколько я знаю, это первая реализация этого метода с открытым исходным кодом. Обратите внимание, что это довольно ново, и не было реального тестирования/использования в реальном мире, поэтому есть некоторые известные ошибки и, вероятно, много неизвестных.

Отказ от ответственности. Я являюсь автором вышеупомянутого проекта.

Ответ 5

Если вы используете инспектор элементов (Инструменты > Инструменты разработчика на хром или расширение Firebug для Firefox), вы можете увидеть, какие методы они использовали для его реализации.

Как вы это реализуете, это то же самое, что и все, - разбивайте задачи на достаточно маленькие единицы, чтобы вы могли понять их, понимать, как подразделения действуют согласованно, чтобы реализовать систему, а затем реализовать единицы и объединить их.

Ответ 6

<!DOCTYPE html>
<html>
<head>
  <script src="https://cloud.tinymce.com/stable/tinymce.min.js"></script>
  <script>tinymce.init({ selector:'textarea' });</script>
</head>
<body>
  <textarea>Next, get a free TinyMCE Cloud API key!</textarea>
</body>
</html>