Добавить опцию отключения автоматического перехода к последнему сообщению после ответа

Всем привет,

Недавно я потратил время на поиск старых тем и обсуждений на Meta и других форумах на базе Discourse и обнаружил, что многие пользователи на протяжении многих лет неоднократно поднимали одну и ту же проблему:

После отправки ответа или закрытия редактора Discourse автоматически прокручивает страницу к самому последнему сообщению в теме.

Для довольно большого числа людей, включая меня, такое поведение скорее мешает, чем помогает.

Почему это вызывает проблемы

Судя по тому, что выражали многие пользователи, основные проблемы следующие:

  • При ответе в середине длинной ветки редактор закрывается, и вид внезапно перескакивает в самый низ, заставляя вас прокручивать страницу обратно до того места, где вы остановились.

  • Если вы отвечаете, просматривая старые сообщения, этот автоматический переход нарушает поток чтения.

  • Некоторые пользователи даже думали, что это баг, так как прокрутка происходит так быстро, что кажется неожиданной и неинтуитивной.

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

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

Предложение по улучшению: сделайте это поведение опциональным

Судя по анализу прошлых тем, похоже, что:

  • Нет встроенной настройки для отключения этой автоматической прокрутки

  • Нет официального плагина, который предоставлял бы переключатель

  • Администраторы и пользователи в настоящее время не могут контролировать это поведение вообще

Поэтому я хочу предложить Discourse предоставить либо:

Настройку пользователя, например:

«После отправки или закрытия редактора оставаться на текущей позиции (не переходить к последнему сообщению)».

или

Настройку на уровне сайта/администратора, например:

«Включить/отключить автоматическую прокрутку к последнему сообщению после ответов».

Это позволило бы разным сообществам (и отдельным пользователям) выбрать модель взаимодействия, которая лучше всего подходит их стилю чтения. Это также соответствует философии дизайна Discourse, которая обычно позволяет настраивать поведение потока чтения.

Почему наличие опции принесет пользу всем

  • Пользователи, которым нравится автоматическая прокрутка, смогут оставить её как есть

  • Пользователи, которым она не нравится, смогут отключить её

  • Администраторы форумов смогут установить значения по умолчанию, соответствующие потребностям их сообщества

  • Никому не придется полагаться на хрупкие пользовательские JavaScript-скрипты или пользовательские скрипты браузера

  • Это улучшит доступность и уменьшит резкие движения, которые могут быть неудобны для некоторых читателей

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

Если я упустил существующую настройку или плагин, пожалуйста, укажите мне на них — но, судя по тому, что я нашел, похоже, что такой опции в настоящее время не существует.

Спасибо за рассмотрение, и я буду очень признателен за любые разъяснения от команды или других разработчиков плагинов.

3 лайка

Разве не будет вам неудобно: вы что-то написали, а затем оказались на десятки постов выше своего сообщения без какого-либо указания на то, что оно было опубликовано? Почему бы просто не продолжить чтение, чтобы при желании прокомментировать остальные посты?

2 лайка

Спасибо за объяснение! Позвольте мне уточнить мой реальный случай использования, потому что текущее поведение по-прежнему создает для меня реальную проблему.

Представьте следующую ситуацию:
Я начинаю ветку обсуждения, ложусь спать, а на следующий день просыпаюсь и вижу более сотни ответов. Многие из них интересны, и я хочу ответить на некоторые из них, просматривая ветку.

Вот в чем проблема:

Когда я читаю ответ где-то в середине темы и отвечаю на него, после отправки моего ответа Discourse сразу же перемещает меня в самый конец темы.
Но это не чат в реальном времени — люди могут не отвечать снова в течение нескольких часов. Мне не нужно переходить к последнему сообщению. Я просто хочу продолжить чтение остальных ответов по порядку.

Мне действительно нужно лишь следующее:

  • Четкое указание на то, что мой ответ успешно опубликован

  • Без потери моей текущей позиции чтения

  • Чтобы я мог естественно продолжить чтение следующих ответов по порядку

Сейчас, после принудительного автоматического перехода, мне приходится вручную прокручивать страницу назад и пытаться вспомнить, где я остановился, что утомительно и нарушает поток чтения.

Именно поэтому опция остаться на текущей позиции прокрутки после публикации была бы чрезвычайно полезна.
Автоматический переход полезен для некоторых сценариев, но в моем случае он просто мешает.

Тысячи и тысячи слов об этом написаны по адресу Will disable_jump_reply make a return? и в связанных темах.

TL;DR: Удерживайте Shift при публикации, чтобы предотвратить прокрутку.

2 лайка

Спасибо за совет! Я не знал о поведении Shift + Reply — в некоторых ситуациях это действительно помогает.

Тем не менее, я всё ещё считаю, что эта функция выиграла бы от наличия соответствующей настройки или предпочтения пользователя. Использование модификатора каждый раз неочевидно и легко забывается, особенно менее технически подкованными пользователями, которые могут даже не знать о существовании таких сочетаний клавиш.

Одно из того, что я действительно ценю в Discourse, — это высокая степень свободы, которую он уже предоставляет: пользователи могут настраивать многие аспекты чтения, навигации и взаимодействия. На мой взгляд, именно эта свобода делает Discourse такой замечательной платформой. В данном конкретном случае было бы замечательно, если бы пользователи могли просто выбрать своё предпочтение по умолчанию:

  • автоматически переходить к последнему сообщению после ответа или

  • оставаться на текущей позиции и продолжать чтение

Наличие чёткого значения по умолчанию с возможностью его изменения сделало бы поведение более интуитивным и доступным. Например, в моих собственных привычках просмотра я обычно открываю большинство тем со страницы в новых вкладках, поскольку современные компьютеры обладают достаточным объёмом памяти, а закрытие вкладок часто быстрее и удобнее, чем постоянная навигация туда и обратно. Это лишь один пример того, как разные пользователи ценят разные рабочие процессы.

Поэтому моя общая философия такова: чем больше выбора для пользователя, тем лучше.
Если функция допускает несколько разумных вариантов поведения, предоставление пользователю права выбора (вместо того чтобы навязывать всем один и тот же сценарий) обычно приводит к лучшему опыту для всех. Это также означает, что таким пользователям, как я, не придётся создавать небольшие скрипты или плагины только для того, чтобы восстановить привычный и естественный для них рабочий процесс.

Ещё раз спасибо за полезный ответ, и надеюсь, что в будущем это всё же будет рассмотрено как потенциальная дополнительная настройка.

2 лайка

Пожалуйста, прочитайте Will disable_jump_reply make a return?. Это была настройка пользователя, которая была удалена.

2 лайка

:heart: Спасибо за подсказку — я теперь прочитал всю тему «Вернётся ли отключение disable_jump_reply?».

Я понимаю логику удаления старой настройки disable_jump_reply:
в то время она работала некорректно, её использовали очень немногие, и Discourse в целом старается не накапливать множество глобальных пользовательских предпочтений. Также я вижу описанную вами философию дизайна — использовать автопереход как способ побудить людей читать тему целиком перед ответом, а более «продвинутые» сценарии скрывать за сочетаниями клавиш или расширенными опциями.

Сочетание Shift + Reply действительно помогает в некоторых случаях, и я ценю, что вы упомянули его. Однако для меня проблема заключается в следующем:

  • оно совершенно не обнаруживается, если вы не читали эту конкретную тему на Meta или вам об этом не сказали;
  • требует дополнительных умственных усилий, чтобы каждый раз помнить об этой специальной клавише;
  • при просмотре длинных тем в нескольких форумах Discourse переход на сотни сообщений назад от того места, где вы читали, всё ещё ощущается довольно суровым «наказанием» за обычный ответ.

Одна из вещей, которые мне лично нравятся в Discourse, — это именно его гибкость:
как администратор, так и обычный пользователь могут настроить множество деталей под свои привычки чтения и навигации. С этой точки зрения, это как раз та область, где небольшая дополнительная настраиваемость могла бы дать значительный эффект, не превращая интерфейс в стену опций.

Например, уже любое из следующих решений стало бы большим улучшением:

  • Видимая опция «ответить без перехода» в интерфейсе (даже если она считается продвинутой/экспертной функцией);
  • Или переключатель на уровне пользователя/сайта, скрытый в разделе «Дополнительно», чтобы те, кому действительно важно такое поведение, могли один раз отключить переход, вместо того чтобы вечно полагаться на скрытое сочетание клавиш.

Я полностью понимаю обеспокоенность по поводу избыточного количества настроек и не прошу вернуть все малоизвестные параметры. Я просто хотел поделиться мнением человека, который много времени тратит на ответы при чтении старых постов:
для этого конкретного поведения отсутствие чёткого и обнаруживаемого выбора ощущается более затратным, чем для многих других предпочтений.

В любом случае, ещё раз спасибо за объяснение и подсказку про Shift — очень полезно знать контекст, даже если я всё ещё надеюсь, что в будущем это будет пересмотрено как какая-то опциональная или «экспертная» настройка.

2 лайка

Ещё раз спасибо — и, что интересно, когда я задал тот же вопрос на нескольких других форумах на базе Discourse, несколько пользователей тоже не знали, что удержание Shift предотвращает прыжок. Так что это явно неочевидное поведение.

С другой стороны, теперь, когда я знаю о механизме Shift, написать небольшой плагин или компонент темы завтра должно быть вполне просто. Это даже даёт мне более чистый подход к реализации, так как мне не придётся полагаться на тяжёлых наблюдателей за изменениями DOM для противодействия автоматической прокрутке — я могу просто подключиться к той же логике.

В любом случае, благодарю за информацию. Даже если это поведение останется доступным только для «экспертов», я рад, что наконец достаточно хорошо понял его внутреннюю логику, чтобы корректно его расширить.

3 лайка

Мой друг, мастер скриптов @Pipecraft, завершил разработку этого плагина. Если вы тоже хотите его использовать, перейдите по ссылке: userscripts/discourse-prevent-jump-on-reply/discourse-prevent-jump-on-reply.user.js at main · utags/userscripts · GitHub

Наконец-то мне больше не нужно удерживать клавишу Shift при ответах на сообщения. Спасибо всем! :heart:

4 лайка

Это… JS-скрипт для запуска через Tampermonkey. Не совсем то, что я бы назвал «плагином» :wink:.

Конечно, можно скопировать логику клавиши SHIFT и переопределить её на основе предпочтений пользователя? Выглядит сложно, правда.

Ну ладно, если работает, значит работает. Я удивлён, что это можно сделать на JS. Вижу, что используется preventDefault(). Интересное решение, между прочим!

3 лайка

Мы также с нетерпением ждём вашего решения. Спасибо :heart:

Можно ли конвертировать этот скрипт Tampermonkey в компонент форума?

1 лайк

Как это сделать на мобильном устройстве?

В теории, я думаю, что да, так как скрипты Tampermonkey похожи на компоненты тем тем, что они являются модификациями на стороне клиента.

Хотя у меня пока недостаточно опыта или знаний. Мне было бы интересно узнать, можно ли передать этот скрипт Tampermonkey в ИИ для создания компонента темы.

Ещё одно замечание: я считаю, что текущий интерфейс — лучший, и нам достаточно просто установить флажок в разделе «Предотвращать переход к последнему сообщению», чтобы сохранить это состояние.

image

1 лайк

Вместо того чтобы упростить переход на ответ, я скорее за то, чтобы упростить возврат туда, где вы были — это также пригодится в других ситуациях.

Некоторые предыдущие темы об этой идее здесь:

2 лайка

Что-то вроде индикатора «Назад», который появляется, когда вы читаете тему наполовину и возвращаетесь к ней позже?

1 лайк

Да, что-то в этом роде.

Я всё же думаю, что для некоторых это может оказаться слишком навязчивым, поэтому детали дизайна, возможно, потребуют доработки. Возможно, его придётся сделать закрываемым, или, может быть, он будет автоматически закрываться после выхода из темы, или, возможно, будет функция «отметить как непрочитанное отсюда»… но что-то вроде этого, да.

3 лайка

Спасибо за вашу идею. Я всё ещё придерживаюсь своего наивного мнения. Я считаю, что чем больше вариантов мы сможем предоставить пользователям, тем лучше, чем жестко задавать конкретную функцию. Запомненное местоположение темы должно быть «Первый непрочитанный» пост ИЛИ «Последний прочитанный» пост, и пользователи должны иметь возможность выбрать то, что им нравится.

2 лайка