Есть другая интересная особенность. Почему Chrome и Firefox по-разному показывают уведомления?
Если у меня есть непрочитанное уведомление, то Firefox во-первых грамотно зайдёт по среднему клику мышки на другую вкладку, во-вторых - не сбросит уведомления (поскольку там есть кнопка для сброса). Chrome же не обработает клик средней кнопки мыши и загрузит существующую страницу, не покажет кнопку для сброса, а автоматически посчитает их прочитанными.
кнопочка сброса появляется если не отрабатывает код
То есть, как я понял, её и не должно быть в идеале? А мне так понравилась. Зашёл, спокойно кликаешь по уведомлениям, как все прочитал - сбросил. Красота.
P.S. А про некорректную обработку средней кнопки мыши в Chrome можешь пояснить, почему так? Раз уж разговор зашёл. Баг то давний весьма.
если с js все ок то вы заходите по ссылке через POST запрос иначе через GET и вам дается кнопачка, чтобы сделать POST запрос и сбросить уведомления
Не, я сейчас о другом. Об обработке средней клавиши мыши. Chrome открывает не в новой вкладке, а в текущем окне. Причём такое поведение я наблюдал только на LOR.
вопрос к разрабам хрума или firefox-а или html стандарта, но скорее всего к разрабам lorsource ибо тут вопиющая бестактность - из ссылки сделали кнопачку
Тут смешалось сразу несколько проблем, каждую из которых надо отдельно решать.
Технически уведомления сейчас работают так - есть табличка, в которую добавляются уведомления при возникновении событий (местами из Java-кода, местами на триггарах). Уведомления удаляются при удалении сообщений на которые они ссылаются автоматически. Чтобы не тратить время на подсчет количества непрочтенных уведомлений, у каждого пользователя есть еще отдельный счетчик непрочитанных уведомлений.
Счетчик показывается на каждой странице. Если он не нулевой, то он превращается в спрятанную форму, при нажатии на ссылку отправляется POST с коммандой «сбросить уведомления». Форма отправляется Javascript'ом в onclick ссылки
Если попадаешь на страницу уведомления GET запросом (т.е. без формы сброса) и есть непрочитанные уведомления - появляется явная кнопка сброса над списком уведомлений.
Итого проблемы такие:
Счетчик уведомлений врет при удалении уведомлений. Тут проблема чисто с производительностью - сейчас массовое удаление и так тормозит, если пересчитывать еще и все счетчики уведомлений то оно будет работать по 5-10 минут. Блокировки в постгрессе устроены так, что пока не закончится удаление скорее всего притормозится постинг у всех пользователей у которых что-то удалилось из уведомлений. Я думаю переделать backend для хранения уведомлений, возможно часть данных вынести в redis или какую-нибудь аналогичную БД.
Счетчик врет из-за кеширования в браузере. Т.к. когда ходишь по одни и тем же страницам может быть показано старое значение счетчика. Тут можно или совсем выключить кеширование (что не здорово), либо обновлять счетчик AJAX-запросом в момент загрузки страницы. Думаю о втором.
Не во всех браузерах работает средняя кнопка и возможны разные накладки при нажатии на ссылку «уведомлений». Тут наверное более логично сбрасывать счетчик уведомлений не при нажатии на капу, а непосредственно на страничке просмотра уведомлений AJAX-запросом. Думаю над этим.
Не, я сейчас о другом. Об обработке средней клавиши мыши. Chrome открывает не в новой вкладке, а в текущем окне. Причём такое поведение я наблюдал только на LOR.
Аналогичное поведение можно увидеть, например, на gmail