Во всех скриптах блока "Символы" не работает Undo.
Я попытался поправить соответствующий кусок, который одинаков для всех данных скриптов:
function onClick() {
var ht=event.srcElement.innerHTML;
if (event.srcElement.nodeName=="TD" && fbw_body.contains(fb2doc.selection.createRange().parentElement())) {
var ht=event.srcElement.innerHTML;
if (ht=="́ ́") ht="́";
fb2window.eval('window.external.BeginUndoUnit(document,"Вставка символа");'+
'var rng=document.selection.createRange();'+
'rng.pasteHTML(rng.htmlText+"' + ht +'");' +
'rng.collapse(false);' +
'rng.select();' +
'window.external.EndUndoUnit(document);');
}
}
Несколько непонятна логика вставки символа - зачем сохранять выделенный кусок при вставке? Гораздо привычнее, чтобы вставляемый символ заменял собой выделение. Я не стал трогать эту логику, но для желающих, чтобы выделенный текст убивался надо поменять строку вставки на
'rng.pasteHTML("' + ht +'");' +
Так же непонятен кусок с проверкой на апострофы. В большинстве таблиц символов они заведомо отсутствуют. Но я не стал удалять данную проверку.
Стоит просмотреть и другие скрипты FBE на корректную работу Undo
ЗЫ Что делают команды rng.collapse(false); и rng.select(); в данных скриптах? Я пробовал их убирать и не нахожу разницу в фунционале.