Плагин к WYSIWYG
Нужна помощь в написании небольшого Javascript-плагина к
WYSIWYG-редактору. Прошу прощения за длинное изложение.
ПРЕДИСТОРИЯ ЗАДАЧИ:
Имеется система, хранящая HTML-документы, доступные для просмотра и
редактирования многими пользователями. В любом месте документа, любой
пользователь в режиме просмотра может прикрепить личную заметку,
видимую в режиме просмотра только ему. Заметки хранятся в отдельной
таблице с указанием места прикрепления к документу в виде смещения от
начала HTML-текста.
Проблема возникает при редактировании в WYSIWYG-редакторе. Нужно
стараться сохранить привязку заметок к документу, при этом скрывая их
от редактирующего пользователя.
ПРЕДЛАГАЕМОЕ РЕШЕНИЕ:
Редактирование осуществляется в двух режимах: собственно WYSIWYG
(обычно iframe в designMode) и HTML (textarea).
С ПЕРВЫМ режимом сложностей вроде не предвидится и делать предлагается
так: позиции заметок загружаются в javascript массив или объект. До
загрузки в iframe, в точки определенные смещением заметок
помещается специальный невидимый тэг (например <hr class="note" id="note_123" />
со стилем hr.note {display:none}). Если при редактировании тэг
привязки заметки будет удален, (это приходится допускать) то должно сработать
исключение и либо это отмечается в массиве данных, либо мы
восстанавливаем тег в нужном месте. При сохранении или переходе в
HTML режим, начиная с начала текста, тэги последовательно удаляются с
сохранением информации об их смещении от начала.
Самый проблемный ВТОРОЙ режим - редактирование HTML в textarea:
Тут использовать скрытые теги не получится и поэтому придется отслеживать
события в textarea: ввод с клавиатуры, действия мышью, контекстное
меню, горячие клавиши и анализировать, какие произошли изменения с
положением наших контрольных точек, каждый раз пересчитывая их
смещение и обрабатывая их нечаянное удаление. ЭТО САМОЕ СЛОЖНОЕ и
основное. В конце, в эти точки вставляем обратно наши hr тэги и переходим
обратно в WYSIWYG-режим.
Это решение позволит не привязываться к конкретному редактору и
должно работать в любом стандартном WYSIWYG-редакторе.
Требуется кроссбраузерное решение.
Возможно ли это реализовать?
Если Вы действительно можете решить эту задачу, готов обсудить бюджет...
Последний раз редактировалось Smoke, 30.10.2009 в 17:19.
|