Web[js, php] — cоздание, хранение аннотаций и комментариев к документам, а так же миграция аннотаций между версиями документа. Как лучше?
Необходимо сделать таку фичу, как в гугл доксах, что можно выделить текст и написать комментарий к выделенному тексту.
Документы загружается пользователями и представляют собой html код, который рисуется как есть. Если загружается новая версия документа, то нужно определить те места с комментами, где текст не изменился, и перенести комменты. А там, где текст изменился, комменты переносить не нужно.
Какие варианты были:
1) модифицировать dom дерево на клиенте, обрамляя выделенный текст в span с уникальным айди, и отсылкой всего документа на сервер вместе с анотацией. Минусы: большой трафик
2) передавать выделенный текст, оффсет от начала документа и коммент на сервер. Спаны вставлять на сервере и на клиенте. Минусы: дублирование кода на сервере и клиенте, не уверенность, что все браузеры и парсеры будут позволять по оффсету находить правильный текст.
Хотелось бы услышать идеи, о том, как можно лучше хранить на сервере данные о анотациях, чтобы лего находить их в тексте, как сравнивать куски текста, чтобы точно определить, что изменившийся текст имеет коммент со старой версии!
Посмотрите в сторону DOMDocument. Он позволит использовать максимально близкие интерфейсы по работе с dom на сервере и на клиенте.
На клиенте, выделяем текст, находим ближайшего потомка, высчитываем для него xpath и офсет, передаем на сервер xpath, офсет и комментарий.
Мы так и поступили — DomDocument на сервере модифицирует дерево по тому же алгоритму, что и клиент. Только без xpath. В чем преимущество в использовании xpath в данном случае?