Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Переход курсора на следующий и предыдущий блоки при нажатии на кнопки вверх/вниз #32

Merged
merged 16 commits into from
Jun 10, 2016

Conversation

khaydarov
Copy link
Member

@khaydarov khaydarov commented Jun 4, 2016


cEditor.nodes.redactor.addEventListener('pointerdown', function(event) {
console.log('here');
});
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лишнее

@talyguryn
Copy link
Member

talyguryn commented Jun 4, 2016

Нужно сделать переходы между блоками на "влево" и "вправо" в начале и в конце блока соответственно.

@talyguryn
Copy link
Member

Боюсь, что события, зависящие от кейап и кейдаун, перехватываются по завершении выполнения стандартных действий. То есть если я нахожусь в начале последней строки и нажимаю "вниз", то каретка сначала улетит в конец строки, а потом выполнится команда перехода в новый блок.
Нет, возможно, это удобно и логично, но только в том случае, если я работаю с целым текстом, а не с различными блоками. Я вижу границы блока, в котором пишу. Я прекрасно знаю, что могу попасть в конец блока нажав "вниз" на последней строке. Поэтому для меня "переход в блок ниже по кнопке вниз" это что-то довольно необычное.
Поэтому надо бы как-то отловить это нажатие до перепрыгивания каретки.

return ;
}

/* Get parents until we didn't find nextSibling to switch caret */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

все равно не понимаю этого блока. Опиши комментарий подробнее

Copy link
Member Author

@khaydarov khaydarov Jun 5, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Когда мы нажимали стрелку "вниз", каретка перемещалась в конец узла. А функция, которая переносит каретку в другой блок, вызывается при KeyUp (Он был уже прописан - globalKeyUp). Поэтому каретка перемещается в конец узла, а в KeyUp проверяется, если каретка в конце узла и дальше ничего нет, "перепрыгнуть" на другой блок. То есть, когда мы в начале последнего узла и нажимаем на кнопку "вниз", мы видим как каретка перемещается в конец узла, а потом перемещается на другой блок. Поэтому прописал дополнительный if, который смотрит, если каретка не в конце узла, мы меняем позицию каретки (caretOffset и FocusedNode) и return;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это надо делать в keyDown, чтобы не было конфликтов со стандартным поведением. Плохо когда сперва она в конец перепрыгивает, а когда отпускаешь клавишу — меняется блок

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То есть, когда мы в начале последнего узла и нажимаем на кнопку "вниз", мы видим как каретка перемещается в конец узла, а потом перемещается на другой блок. Поэтому прописал дополнительный if, который смотрит, если каретка не в конце узла, мы меняем позицию каретки (caretOffset и FocusedNode) и return;

вот это не понятно совсем. Задам вопросы по пунктам

  1. Когда мы в начале узла нажимаем ВНИЗ — каретка должна просто перейти на следующую строчку. То есть оставляем стандартное поведение.
  2. Зачем в данной функции focusedElement ?
  3. Не понятный цикл.
while ( focusedElement.nextSibling == null ) {
    focusedElement = focusedElement.parentNode;
}

Если в коде есть какие-то не очевидные алгоритмы, то их лучше выносить в отдельные небольшие функции с понятным названием и комментариями. Тем более этот код у тебя 2 раза дублируется.
Но сперва объясни, что требуется получить. Из твоего кода сейчас следует, что ты пытаешься получить focusedElement , но он уже есть, и вообще зачем он нужен?

@khaydarov khaydarov self-assigned this Jun 5, 2016

if (event.keyCode == cEditor.core.keys.DOWN || event.keyCode == cEditor.core.keys.RIGHT ) {

/** Stop transition when caret is not at the end of Text node
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему Stop ? ты ничего не останавливаешь, ты просто не выполняешь переход к следующему блоку

cEditor.content.setToNextSibling( block );
}

else if (event.keyCode == cEditor.core.keys.UP || event.keyCode == cEditor.core.keys.LEFT ) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

else if отвалился


block.addEventListener('keydown', function(event) {

cEditor.caret.save();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

надо вынести обработчик кейдауна в отдельную функцию, а в ней уже вызывать необходимую логику.

например blockKeydownHandler

khaydarov and others added 2 commits June 8, 2016 18:46
Продолжить дебажить изменения каретки

while ( position ) {

/** @todo comment */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

напиши тут полноценный комментарий, пока не забыли

@neSpecc neSpecc merged commit 7fa2110 into master Jun 10, 2016
@neSpecc neSpecc deleted the transition branch June 10, 2016 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Переход между блоками с помощью клавиатуры
3 participants