Скрипты вставки символов - не работает Undo, + вопросы по логике

47 views
Skip to first unread message

fff

unread,
Dec 12, 2024, 11:33:21 AM12/12/24
to Fiction Book Editor
Во всех скриптах блока "Символы" не работает 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(); в данных скриптах? Я пробовал их убирать и не нахожу разницу в фунционале.

Sclex

unread,
Dec 13, 2024, 4:52:32 AM12/13/24
to Fiction Book Editor
Обновлены все 9 скриптов в папке "07_Символы" - до версии 1.3.
- теперь будет работать Undo после вставки символа.
- теперь символ будет вставляться *вместо* выделенного текста.

fff, спасибо!

> Так же непонятен кусок с проверкой на апострофы. В большинстве таблиц символов они заведомо отсутствуют.
Во всех скриптах в папке "07_Символы" один и тот же код. Он не затачивался под каждый скрипт отдельно.

четверг, 12 декабря 2024 г. в 19:33:21 UTC+3, fff:

Sclex

unread,
Dec 13, 2024, 5:24:16 AM12/13/24
to Fiction Book Editor
> Во всех скриптах в папке "07_Символы" один и тот же код.
Кроме  самой таблицы символов, конечно.

пятница, 13 декабря 2024 г. в 12:52:32 UTC+3, Sclex:

Sclex

unread,
Dec 13, 2024, 5:29:23 AM12/13/24
to Fiction Book Editor
fff, откуда вы узнали, что можно использовать eval, чтобы работали функции BeginUndoUnit и EndUndoUnit?

четверг, 12 декабря 2024 г. в 19:33:21 UTC+3, fff:
Во всех скриптах блока "Символы" не работает Undo.

fff

unread,
Dec 13, 2024, 7:49:33 AM12/13/24
to Fiction Book Editor
пятница, 13 декабря 2024 г. в 13:29:23 UTC+3, Sclex:
fff, откуда вы узнали, что можно использовать eval, чтобы работали функции BeginUndoUnit и EndUndoUnit?

Поискал  BeginUndoUnit по  папке html, нашел пример в скрипте "Разбиение на секции". В некоторых скриптах папки HTML Undo реализовано без eval, но сходу в моих опытах оно не заработало, а eval прошел.

Sclex

unread,
Dec 14, 2024, 3:18:20 AM12/14/24
to Fiction Book Editor
> В некоторых скриптах папки HTML Undo реализовано без eval, но сходу в моих опытах оно не заработало
На момент, когда я делал скрипты в папке "Символы" (а это одни из первых моих скриптов), я еще не знал, что можно использовать eval, чтобы BeginUndoUnit и EndUndoUnit работали.

пятница, 13 декабря 2024 г. в 15:49:33 UTC+3, fff:
Reply all
Reply to author
Forward
0 new messages