Программная навигация по истории textarea
Как можно программно добавлять undo/redo состояния для textarea.
И как можно отловить события навигации по этим состояниям, кроме как отлавливания oninput и анализа изменений. Пробовал в скрипте присваивать новые значения - textarea.value = "new value" , но пункт Отменить в контекстном меню появляется только в Firefox. Пробовал создавать событие keydown через document.createEvent('UIEvents'), но эффекта никакого ни в одном браузере. Благодарю за любую помощь. |
Хоть какие то идеи ? Буду пробовать все что имеет смысл.
|
а зачем всё это?
|
Есть такой редактор кода на js - ACE
В нем textarea используется только для ввода символов и для получения контекстного меню (с командами Вставить, Копировать, Вырезать) Хотелось бы оживить команды Отменить, Повторить. Вот и думаю как повлиять на навигацию программно. На программное изменение value эти команды не реагируют (Firefox реагирует). |
Этот редактор посмотри http://elrte.org/demo
|
danik.js, там не используется текстария. они даже курсор сами рисуют, так что горячие клавиши работают - и то хорошо.
Serg_pnz, это вообще о другом |
tenshi, еще как используется. Для взаимодействия с буфером обмена, вводом с клавиатуры и для контекстного меню.
Основная причина (которую я знаю), по которой не подходит contenteditable - это невозможность вставки кода из буфера как text/plain в браузерах, неподдерживающих clipboardData( Firefox мать его, и Opera) Да и в любом случае, содержимое может меняться программно, поэтому нужно иметь возможность повлиять на undo/redo. Пока это получается только в Firefox... |
ух ты, действительно. интересное решение.
text/html всегда можно очистить от тегов.. |
Цитата:
|
не так уж и накладно. а зачем ставлять хтмл код? это же редактор текста
|
Мне кажется мы не понимаем друг друга. ACE - редактор кода. Contenteditable неприменим в FireFox/Opera (нет clipboardData). Поэтому используется textarea. Да и без разницы что используется div[contenteditable] или textarea. Мне нужен способ влияния на историю изменений, управляемую через контекстное меню.
|
после вставки данных их можно нормализовывать как душе угодно.
|
Да ну? А как тогда в него вставить html - код ?
Кроме того, вставка больших кусков кода приводит к весьма сильным тормозам, из-за генерации ненужных dom-элементов. Так что не вариант абсолютно. |
текст содержащий угловые скобочки? как и любой другой текст
тормоза не такие уж и большие и однократные. так что не страшно. |
Цитата:
При небольших объемах текста тормоза еще терпимы. Но при вставке больших кусков - браузер тупо подвисает на продолжительное время. Так что это критично, ибо практически ограничивает длину вставляемого текста. Я делал прототип редактора чисто на div[contenteditable] и затык был именно в этом. Так что textarea - единственный выход, по крайней мере пока Firefox не начнет поддерживать clipboardData |
больших - это сколько мегабайт?
|
Ну допустим производительность не особо разнится.
Дело то не в этом. Проблему с хистори это не решает. |
Хм. Оказывается для contenteditable доступны команды document.execCommand() 'undo', 'redo', 'insertText'
Кроме того, обнаружил, что разрабатывается спецификация по UndoManager : http://dvcs.w3.org/hg/undomanager/ra...domanager.html |
Часовой пояс GMT +3, время: 23:23. |