
Когда разбушевался Роскомнадзор и Хабр по вынужденным причинам разделился, появился «младший брат», которого не жалко — Geektimes. Мне такое разделение пришлось не по душе и Я сделал для локального пользования небольшое расширение для браузера, которое выводит посты Geektimes на Хабре в одной ленте.
Вчера же, случилось еще одно разделение, у Хабра появляется «кузен гуманитарий» — Мегамозг. Добавить его ленту в общую ленту на Хабре Мне не составило труда. Увидев настроение пользователей от всех этих разделений, Я решил выложить это расширение в общий доступ, возможно Вам тоже будет удобней так читать Хабр (по старинке).
Расширение работает только на вкладках:
Для зарегистрированных «все подряд» — http://habrahabr.ru/feed/all/
Для незарегистрированных «лучшее за сутки» — http://habrahabr.ru/posts/top/daily/
Работа довольно проста, при заходе, делается дополнительно два GET запроса на geektimes и megamozg, получаются посты и вставляются между существующими на Хабре, отсортированные по времени.
Синхронизация с geektimes довольно красиво все показывается, а с megamozg пока есть проблемы, из-за того, что там довольно мало постов в день, скоро думаю все изменится.
Добавить в браузер:

Кому интересен исходник, вот:
Открыть код
var habr = { init: function() { var last = document.createElement('div'), published = document.createElement('div'); last.setAttribute('id', 'last_id'); last.setAttribute('class', 'post shortcuts_item'); last.setAttribute('style', 'display:none;'); published.setAttribute('class', 'published'); published.innerText = '20 января 2015 в 00:01'; last.appendChild(published); document.getElementsByClassName('posts')[0].appendChild(last); habr.feed('geektimes.ru'); }, feed: function(host) { var href = location.href; href = href.replace('habrahabr.ru/posts/top/daily/',host + '/interesting/'); href = href.replace('habrahabr.ru/feed',host); var xhr = new XMLHttpRequest(); xhr.open("GET", href, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var html = document.createElement('div'); html.innerHTML = xhr.responseText; var posts = html.getElementsByClassName('post'); for (var i = 0; i < posts.length; i++) { var post = document.createElement('div'); post.innerHTML = posts[i].innerHTML; var date = post.getElementsByClassName('published')[0].innerText; var postDate = habr.getDate(date); post.getElementsByClassName('title')[0].setAttribute('style','padding-right:71px;'); post.getElementsByClassName('favorite')[0].parentNode.removeChild(post.getElementsByClassName('favorite')[0]); post.getElementsByClassName('plus')[0].parentNode.removeChild(post.getElementsByClassName('plus')[0]); post.getElementsByClassName('minus')[0].parentNode.removeChild(post.getElementsByClassName('minus')[0]); habr.addChild(post.innerHTML, postDate, host, posts[i].id); if (i == posts.length-1 && host == 'geektimes.ru') { habr.feed('megamozg.ru'); } } } }; xhr.send(null); }, addChild: function(data, time, host, id) { var posts = document.getElementsByClassName('post'); for (var i = 0; i < posts.length; i++) { var date = posts[i].getElementsByClassName('published')[0].innerText; var postDate = habr.getDate(date); var postAdd = document.createElement('div'); postAdd.setAttribute('class', 'post shortcuts_item'); postAdd.setAttribute('id', id); postAdd.setAttribute('style', 'background:url("http://' + host + '/images/logo.svg") right top no-repeat; background-size: 71px;'); postAdd.innerHTML = data; if (time >= postDate) { document.getElementsByClassName('posts')[0].insertBefore(postAdd, document.getElementById(posts[i].id)); break; } } }, getDate: function(date) { var d = new Date(), dateYear, dateMonth, dateDay, dateHour, dateMin, dateMinSec, parseDate; if (date.indexOf('сегодня') + 1) { date = date.replace('сегодня в ', ''); dateMinSec = date.split(':'); dateYear = d.getFullYear(); dateMonth = d.getMonth(); dateDay = d.getDate(); dateHour = dateMinSec[0]; dateMin = dateMinSec[1]; } else if (date.indexOf('вчера') + 1) { date = date.replace('вчера в ', ''); dateMinSec = date.split(':'); dateYear = d.getFullYear(); dateMonth = d.getMonth(); dateDay = d.getDate()-1; dateHour = dateMinSec[0]; dateMin = dateMinSec[1]; } else { parseDate = /([0-9]{1,2})\s(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s([0-9]{4})\sв\s([0-9]{2}):([0-9]{2})/gi.exec(date); if (!parseDate) { parseDate = /([0-9]{1,2})\s(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\sв\s([0-9]{2}):([0-9]{2})/gi.exec(date); dateYear = d.getFullYear(); dateDay = parseDate[1]; dateHour = parseDate[3]; dateMin = parseDate[4]; } else { dateYear = parseDate[3]; dateDay = parseDate[1]; dateHour = parseDate[4]; dateMin = parseDate[5]; } switch (parseDate[2]) { case 'января': dateMonth = 0; break; case 'февраля': dateMonth = 1; break; case 'марта': dateMonth = 2; break; case 'апреля': dateMonth = 3; break; case 'мая': dateMonth = 4; break; case 'июня': dateMonth = 5; break; case 'июля': dateMonth = 6; break; case 'августа': dateMonth = 7; break; case 'сентября': dateMonth = 8; break; case 'октября': dateMonth = 9; break; case 'ноября': dateMonth = 10; break; case 'декабря': dateMonth = 11; break; default : dateMonth = 0; } } return new Date(dateYear, dateMonth, dateDay, dateHour, dateMin); } }; habr.init();
Спасибо, ragequit.
Исходники на GitHub:
github.com/extensionsapp/habrahabr-chrome
github.com/extensionsapp/habrahabr-firefox
UPD 13.03.15: Изменились ссылка на хабре. Все было исправлено и работает.
Теперь работает на 3-х ссылках:
http://habrahabr.ru/feed/interesting/ — интересное из Ваших подписок.
http://habrahabr.ru/feed/all/ — все подряд из Ваших подписок.
http://habrahabr.ru/all/ — все подряд.
Если хотите читать только Habrahabr и Geektimes, идете на Мегамозг и снимаете галочки со всех хабов. Аналогичные манипуляции и для гуманитариев.
UPD 09.09.15:
Установка обезьянки:
Violent monkey [Opera], Greasemonkey [Firefox], Tampermonkey [Chrome], GreaseKit [Safari]
Затем установка расширения:
Нажать Row -> https://gist.github.com/extensionsapp/946a14d5c820d57ac7c4
или
Нажить Install -> https://openuserjs.org/scripts/extensionsapp/habrahabr-userscript
UPD 16.08.17: Обновление скрипта после редизайна Хабра.
