Discourse Tab Bar for Mobile

GitHub repository:

Screenshots


Installation

Follow the instructions in this howto topic:

Customization

See the readme file in the theme’s GitHub repository.

Ideas to improve this theme are very welcome :slightly_smiling_face:


Update 24/12/2018:

You no longer need to overwrite any code in order to customize this theme. It’s now shipped with theme settings that allow customization for each of the 6 tabs with ability to disable any tab. See the readme file for details.

77 лайков

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

Есть ли способ это сделать? Может быть, что-то вроде

body:not(.logged-in) .d-tab-bar-theme {
    display: block
}
1 лайк

Привет, Бен

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

4 лайка

Как добавить кнопку + «Новая запись» в панель?

Привет, Питер,

В ядре Discourse есть удобная маршрутная ссылка /new-topic, которая позволяет открывать редактор сообщений через URL. Всё, что вам нужно сделать, — использовать эту ссылку как URL для вкладки, которая должна открывать редактор.

13 лайков

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

Одна из самых запрашиваемых функций — отображение значка непрочитанных уведомлений и значка непрочитанных личных сообщений на клавишах в нижней части экрана.

Позволяет ли JavaScript API Discourse реализовать это?

7 лайков

Привет, Nildarar,

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

Да, необходимые данные доступны в объекте currentUser, к которому легко получить доступ. Большая часть работы по этой функции будет заключаться в 1) определении, на каких вкладках отображать значки, и 2) правильном позиционировании значков с помощью CSS.

8 лайков

Спасибо, @Osama
Исходя из ваших рекомендаций, я нашел эти объекты.

<script type="text/discourse-plugin" version="0.8">
    let currentUser = api.getCurrentUser();
    console.log(currentUser);
</script>

// unread_high_priority_notifications: 2
// unread_notifications: 7
// unread_private_messages: 2

Есть ли способ зарегистрировать функцию в событии, или нам следует узнать об этом с помощью следующего трюка?

$('.header-dropdown-toggle current-user').bind('DOMSubtreeModified', function(){
  console.log('изменено');
});
5 лайков

Да, это те самые свойства, которые нам нужно использовать. Однако, поскольку Discourse — это приложение на Ember, мы обычно не подписываемся на события DOM для обновления интерфейса. Вместо этого мы должны использовать то, что в Ember называют ‘вычисляемыми’ свойствами.

В компоненте уже определено вычисляемое свойство здесь, так что вы можете использовать его в качестве примера. Как только вы определите своё вычисляемое свойство, которое решает, нужно ли отображать значок уведомлений (на основе таких свойств, как currentUser.unread_high_priority_notifications и т. д.), вам нужно будет использовать это свойство в шаблоне Handlebars по той же ссылке в нижней части.

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

8 лайков

Спасибо, я попробую :wink::+1:

6 лайков

Панель вкладок отображается с белым фоном даже в тёмной теме. Я только что обновился с версии 2.7.0 beta 1 до 2.7.0 beta 3, и после этого начал появляться белый фон. До этого всё работало отлично. Я также попробовал удалить все остальные компоненты темы и все настройки кастомизации, чтобы проверить, не влияет ли что-то на панель вкладок. Но даже в минимальной установке Discourse панель вкладок имеет белый фон в тёмной теме. Не могли бы вы, пожалуйста, посмотреть на это?

5 лайков

Я исправил эту проблему. Спасибо, что сообщили!

9 лайков

Похоже, что в некоторых случаях эта вкладка приводит к перекрытию кнопки «Ответить» прогрессом темы (например, я могу воспроизвести это в Chrome при эмуляции iPhone SE).

Как видно, кнопка «Ответить» перекрыта полосой прогресса. Однако, если отключить эту полосу, всё работает. Думаю, это связано с тем, что позиция кнопки прогресса задана как относительная, но я не знаю, как это исправить.

4 лайка

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

1 лайк

@haroldfy Я не могу воспроизвести эту проблему здесь, ни на Meta, ни в конструкторе тем. Возможно, у вас есть другие темы или кастомизации, которые мешают? Я могу посмотреть, если ваш сайт общедоступен.

@littleviolette Я стараюсь по возможности избегать добавления кода, который нацелен на элементы другого компонента. В данном случае вы можете создать отдельный компонент с этим CSS, чтобы переместить кнопку ToC выше панели:

html:not(.anon) .d-toc-toggle {
  margin-bottom: 55px;
}
8 лайков

Спасибо, что уделили внимание этому вопросу. Это частный сайт, я попробую отключить другие настройки и продолжить отладку оттуда.

4 лайка

Я думаю, что нашел ошибку, и воспроизвести её удаётся только в версии PWA моего сайта на iOS (на Android и в Safari для iOS всё работает нормально).

Панель вкладок должна быть всегда зафиксирована, верно? Вот как это выглядит в правильном состоянии:

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

1 лайк

У меня была та же проблема, @haroldfy @littleviolette. Вы можете исправить это следующим образом:

html:not(.anon) #topic-progress-wrapper.docked{
margin-bottom:0!important;
}
7 лайков

Панель вкладок также конфликтует с основной функцией фильтрации постов, которая добавляет «липкий» нижний колонтитул (posts-filtered-notice) при фильтрации.

В любом случае, спасибо за этот отличный TC :slight_smile:

5 лайков

Отличный компонент темы, спасибо.

У меня есть предложение, и я хотел бы узнать, есть ли интерес к функции «скрытие при прокрутке»?

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

Пример, который я нашел, здесь:

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

9 лайков