Года два назад скриншоты визуального редактора на сайте http://www.saitistika.ru/ вызывали восхищение и в тоже время недоверие. Каждому, кто хоть немного знаком с HTML очевидно насколько ограничены возможности по управлению стандартной формой textarea. И казалось бы, что это единственный инструмент для ввода многострочных текстов в HTML, не считая ActiveX включений. Однако, с распространением Open Source кланов визуального редактора RichEditor, оказалось что разработчиками MS-Explorer предусмотрен многофункциональный интерфейс для ввода и правки текстов в пользовательских формах (стабильная работа метода поддерживается в IE версии от 5.0 и выше). И более того, для включения этого интерфейса достаточно лишь установить одно «волшебное» свойство designMode в значение "on".
И как же это делается? Да очень просто. Мы создаем в HTML-коде страницы редактора объект. Для этих целей подойдет конструкция iFrame и идентифицируем его. Скажем как newTextArea.
Попробуйте теперь открыть полученный HTML-файл в IE. Перед нами просторное поле ввода. Вы наверняка сразу же принялись набирать текст. Попробуйте стандартные для Windows команды редактирования (Ctrl-Z – для отката назад, Ctrl-B для установки стиля выделенного текста в Bold, Ctrl-I для установки стиля в Italic и т.д.). Однако вслед за восторгом от открывающихся перспектив, предупреждающим сигналом в сознании звучит предупреждение: «а как же это использовать практически?!». Для начала нам может понадобиться загрузить в окно редактора какой-либо текст. Это можно сделать стандартной печатью в объект.
newTextArea.document.writeln(‘Текст’);
Хотя по всем правилам стоит открыть и закрыть документ объекта.
Если у вас возникло желание приукрасить текстовое поле. Таким же образом можно направить в объект редактора таблицу стилей (CSS). Но какой смысл вводить или редактировать текст, если нет возможности сохранить изменения?! А сохранить их тоже очень просто. Достаточно создать в начале документа форму, а в ее теле скрытое поле.
Скажем, имя нашей формы будет myform, имя скрытого поля message. Теперь используем это поле как идентификатор. Мы создадим в теле основного документа кнопку, которой назначим событие
Тем самым мы присваиваем объекту Java-script message содержимое поля ввода редактора на данный момент. И после этого передаем содержимое формы myform на сервер. На стороне сервера мы можем принять содержимое формы посредством сервер-ориентированного языка программирования. Но это уже совсем другая история.
Вам наверняка попадались на глаза буклеты от разработчиков систем управления контентом с заявленной там совместимостью их визуальных редакторов с MS-Word. Желаете заявить тоже самое о своем редакторе? Заявляйте смело. Попробуйте открыть в MS-Word какой либо документ со сложной разметкой. Скопируйте содержимое документа в своей редактор. Удивлены? Документ с большего сохранил свою разметку и уже в вашем редакторе.
Да и картинки, которые были в исходном документе, тоже перенеслись. Только вот с картинками не все так просто, как казалось бы. При сохранении документа они потеряются, по той простой причине, что редактируемый HTML документ содержит лишь ссылки на изображения, реально расположенные во временных папках вашего компьютера. Впрочем, первоначальный восторг подпортит еще и тот факт, что MS-Word версии 2000 и выше имеет скверную особенность передавать в буфер документ не в запрошенном HTML формате, а в формате XHTML. Что подразумевает просто безмерное описание каждого маломальского фрагмента форматирования документа. В результате XHTML документ имеет реальный размер в несколько раз превышающий исходный документ MS-Word. Очевидно, что когда видимые пару страниц текста, реально занимают сотню килобайт, мало кто согласится ждать их загрузки с сервера в Интернете. Но все перечисленное, на самом деле, не есть проблемы, это задачи. А соответственно, имеют решения. Содержание документа при сохранении мы можем «подчищать». Скажем, в PHP и Perl есть потрясающий механизм для подобного рода действий – функции регулярных выражений preg . Что же касается, использования изображений в редактируемом документе, то написать сервисную функцию, которая позволит пользователям самостоятельно добавлять в содержание изображения. Она же позаботиться о предварительной загрузке (upload) изображений на сервер. И если мы уже заговорили о сервисах, то не лишним будет заметить, что отсутствие в нашем редакторе, столь привычной для офисных приложений, «панели инструментов» наврятли приведет в восторг пользователей. Так, что вместо того, что бы публиковать на странице редактора список «горячих» клавиш, давайте вообразим себя дизайнерами интерфейса, нарисуем и поместим ожидаемую «панель инструментов». «Кнопкам» этой панели мы самостоятельно назначим наиболее используемые команды форматирования.
Делается это следующим образом. Сначала мы назначаем объекту выделенную в редакторе область текста
var tr = frames.newTextArea.document.selection.createRange();
Далее выполняем над данной областью команду форматирования
tr.execCommand( 'команда') Теперь восстанавливаем выделение, возвращаемся в документ.
tr.select(); frames.newTextArea.focus();
Наиболее часто используются команды: Bold – «жирный» шрифт Italic – наклонный шрифт Underline - подчеркивание JustifyLeft – левая центровка JustifyCenter – центровка по центру JustifyRight – правая центровка InsertOrderedList – ненумерованный список InsertUnorderedList – нумерованный список Undo – откат назад Redo – откат вперед
Теперь вам понадобится толика знаний HTML и Java-script , огромное желание удивить мир, и вы его наверняка удивите чем-нибудь. По крайней мере, ваши новоиспеченные гостевые книги наполнятся симпатичными сообщениями благодарных посетителей.