В топике я опишу простой способ немного улучшить сервис Eventr, не так давно описанный на Хабре. Этот сервис сразу заинтересовал меня своей идеей и я решил пристально следить за его развитием. А как можно следить не используя его? Так я и перенес все свои ленты из GoogleReader’а в этот сервис и начал пытаться пользоваться им как основным RSS-агрегатором.
Я не стану перечислять здесь все, на мой взгляд, детские болезни и ошибки, для этого есть фидбек, где я успел изрядно «надоесть» найденными багами или группа на Реформале для новых идей.

Сразу подчеркну: Я не имею отношения к команде разработчиков сервиса. Все (целых два) улучшения написаны мной для личного использования. И не являются официальными решениями сервиса.

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

Итак, что же я сделал:
  1. Кнопка для панели закладок Добавить в Eventr;
  2. Выделение лент и папок имеющих новые посты.

Добавить в Eventr


Часть первая: Браузерный парсер RSS.

Желаемое: Научить браузер воспринимать Eventr.com как RSS-агрегатор, куда можно передать фид.

Пример для GoogleChrome



Для Mozilla Firefox я не нашел способа. Искал механизм правки «приложений» для чтения RSS, но так и не нашел.

Для Google Chrome и его стандартного расширения от самой Google RSS Subscription Extension (от Google) все оказалось максимально просто и прозрачно: При выборе агрегатора, последним пунктом идет Menage... (Управление...)
image
там просто создаем новый пункт, указываем название Eventr и прописываем шаблон ссылки через который можно добавить поток.

http://eventr.com/stream/subscribe?url=%s

Где %s будет заменятся адресом фида.

Часть вторая: Eventr сам умеет искать фиды на странице — не будем мешать.

Изначально, я написал код закладки таким образом, что с текущей страницы выбирался первый найденный фид и передавался на Eventr, но в службе поддержки, мне любезно подсказали, что сайт сам умеет искать ленты на выбранном сайте/адресе. Так родилась кнопка которая вызывает в новом окне Eventr и предлагает добавить поток с текущего открытого сайта.
Код простой и незатейливый, не использующий потайные ходы в браузерах.
javascript:(
function(){
  f = 'http://eventr.com/stream/discover?url=' + encodeURIComponent(window.location.href);
  a = function(){
      if (!window.open(f, 'eventr', 'location=yes,links=no,scrollbars=yes,toolbar=no,width=1024,height=1000'))
        location.href = f;
  };
  if (/Firefox/.test(navigator.userAgent)) {
    setTimeout(a, 0)
  } else {
    a()
  }
})()


* This source code was highlighted with Source Code Highlighter.

Хоть сжимать столь маленький код смысла мало, но все же сжатый вариант:

javascript:(function(){f='http://eventr.com/stream/discover?url='+encodeURIComponent(window.location.href);a=function(){if(!window.open(f,'eventr','location=yes,links=no,scrollbars=yes,toolbar=no,width=1024,height=1000')) location.href = f;};if (/Firefox/.test(navigator.userAgent)){setTimeout(a, 0)}else{a()}})()

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

Если лента на переданной странице одна, то Eventr сразу добавляет её и отображает.

Если лента уже была в списке пользователя, то добавление не происходит.

Выделение непрочитанных лент


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

Ну а я задался задачей сделать для себя временное решение. Мое решение выглядит так (слева — стандартное отображение, справа после обработки):

image

Я снова не нашел ничего подходящего для Mozilla Firefox, но я честно искал, попробовал несколько разных дополнений (сейчас его поклонники закидают меня помидорами...), но ничего подходящего я не нашел, потому если кто в комментариях даст ссылку на аддон позволяющий выполнит�� JS-код сразу после загрузки страницы, я добавлю это к посту.

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

А пока — решение для Google Chrome.
Для этого нам понадобится аддон Персонализированный Веб который отлично позволяет модифицировать открываемые сайты. На странице описания аддона есть подробный список возможностей, потому сразу к делу.

Применять для URL:
^http://(www\.)?eventr.com/.+$

Т.к. сервис уже использует jQuery, то почему бы нам им не воспользоваться? Допишем JS-код к документу который будет каждый раз при открытии новой страницы искать пункты в дереве фидов у которых есть класс has-new.
Добавлять HTML:
<script>
$(document).ready(function(){
  $('.group li').each(function(){
    if($(this).hasClass('has-new')){
      $('a:first span', this).css('color', '#4D1E1E').css('font-weight', 'bold');
    }
  });
});
</script>


* This source code was highlighted with Source Code Highlighter.

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

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