Тостер — всё в компостер. Фильтруй и кайфуй

habr.png

Так уж сложилось, что в СНГ довольно популярен русский Q&A ресурс по ИТ тематике — Тостер. Однако чего-то ему не хватало, когда я начал плотно с ним знакомиться. Это и вылилось в улучшение в виде браузерного расширения. Встречайте.

Ключевые особенности:

  • Название: Toster Comfort.
  • Статистика пользователей: процент вопросов с решением; карма с Хабра; сводка из профиля — всё это в списке вопросов Тостера.
  • Уведомления: в реальном времени на сайте, на иконке, плюс push-уведомления, много настроек, сайт должен быть открыт (вики).
  • Фильтры: условия на основе формул: можно скрывать вопросы, раскрашивать их цветом, а также показывать уведомления, — всё это гибко настраивается в виде логических условий (вики).
  • Интерфейс: мелкие улучшения, например, показ точных дат или отображение статуса подписки в списке вопросов.
  • Интерфейс Хабра: мелкие улучшения (опционально), например, линии на отступы в комментариях.
  • Open source: можно переделать под себя, если очень хочется (исходники).
  • Free: MIT License.
  • Потребление памяти: 30–50МБ, в зависимости от опций и интенсивности использования Тостера
  • Размер: 93КБ для v0.8.1 (распакованный, не минимизированный код).
  • Фреймворк: отсутствует, читсый JS (минимализм).
  • Качество кода: среднее, смешение стилей, большие функции, грязные приёмы, мало комментов.
  • Разрешения: toster.ru, habr.com, notifications, storage, unlimitedStorage


Изначально расширение сделал для себя с одной-единственной целью: показывать процент вопросов пользователя, в которых он удосужился нажать кнопку «Отметить решением». Затем мало-помалу добавлялись то одни, то другие хотелки, пока инструмент не вырос в монстра на сотню килобайт. Тем не менее, принцип «не использовать ничего лишнего» соблюдался до конца.

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

Пример гибкого правила, которое позволит получать уведомления на определённую тему:

!tag("Блокирование рекламы") && !contains(t,"реклам") && contains(t,"блокиров") && !tag("HTACCESS") || containsWord(t,"ркн") || contains(t,"роскомнадзор") || contains(t,"роскомпозор") || contains(t,"государств") || contains(t,"запрещен") || contains(t,"запрещён") || contains(t,"пиратск") || containsWord(t,"обход") || containsWord(t,"ростелеком") || containsWord(t,"яровой") || containsWord(t,"рф") && tag("Компьютерные сети") = notify


Сразу скажу, что функцию eval () использовать было нельзя. Так что особо не разгуляешься. Поэтому пришлось написать свой костыль на 5 КБ кода, используя обратную польскую запись. Это, можно сказать, сильно кастрированный JS, как по функциям, так и по синтаксису.

Недавно был пост про Toster Extension. Если сравнивать, то TE имеет более приятный интерфейс и кое-какие функции, которых нет в Toster Comfort. Однако моё расширение делает акцент на потреблении ресурсов. Впрочем, никто не мешает использовать оба расширения, они не должны конфликтовать.

По-хорошему, TC нужно переписывать с нуля, потому что работу можно ускорить минимум вдвое, а работу с кэшем — раз в 10, отказавшись от localStorage и JSON.stringify () и изменив некоторые архитектурные решения. Но этот подвиг предстоит делать уже не мне. А я поклонник принципа «работает — не трогай». Пока отпуск, активно принимаю issues и PR, но не в ущерб минимализму. Спасибо за внимание!

© Habrahabr.ru