Как отключить выделение строки при щелчке по желобу в редакторе ACE?

Я пытаюсь отключить все взаимодействие пользователя с редактором ace. Мне удалось остановить большинство взаимодействий со следующими настройками:

codeEditor.setReadOnly(true);
codeEditor.setHighlightActiveLine(false);
codeEditor.setHighlightGutterLine(false);
codeEditor.container.style.pointerEvents = "none";
codeEditor.renderer.$cursorLayer.element.style.opacity = 0;

Однако, хотя большая часть интерактивности теперь отключена, события mousedown в желобе по-прежнему работают. Например, когда вы щелкаете по линии желоба, текст в этой строке по-прежнему выделяется. Другие события, такие как двойной щелчок для выбора всего или сворачивание кода, также работают. Вы можете проверить это здесь: http://jsfiddle.net/squarePenguin/zhpms1mm/

Я попытался удалить слушателей на желобе, но, похоже, ничего не работает. Это все, что я пробовал:

codeEditor.getSession().removeAllListeners("guttermousedown");
codeEditor.getSession().removeAllListeners("gutterclick");
codeEditor.getSession().removeAllListeners("gutterdblclick");
codeEditor.getSession().removeAllListeners("guttermousemove");
codeEditor.getSession().removeAllListeners("click");
codeEditor.getSession().removeAllListeners("mousedown");

Есть ли у вас какие-либо идеи? Спасибо за ваше терпение!


person vladb    schedule 18.06.2015    source источник


Ответы (1)


Вы можете сделать это с помощью

stop = function(e) {e.stop()}
editor.on("guttermousedown", stop, true);
editor.on("gutterclick", stop, true);
editor.on("gutterdblclick", stop, true);
editor.on("guttermousemove", stop, true);
editor.on("click", stop, true);
editor.on("mousedown", stop, true);

codeEditor.getSession().removeAllListeners не работает, потому что события мыши отправляются в редакторе, а не в сеансе, а removeAllListeners не удаляет defaultHandlers

codeEditor.container.style.pointerEvents = "none"; не работает, потому что некоторые элементы в ace имеют стиль pointerEvents="auto".

person a user    schedule 18.06.2015