NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name habrahabr-userscript // @description Объединение постов Хабрахабр + Geektimes, в одну ленту на Habrahabr.ru // @author ExtensionsApp // @license MIT // @version 2.0.18 // @include https://habrahabr.ru/feed/all/* // @include https://habrahabr.ru/feed/interesting/* // @include https://habrahabr.ru/all/* // @grant GM_setValue // @grant GM_getValue // @grant GM.xmlHttpRequest // ==/UserScript== var habr = { init: function() { var styleEl = document.createElement("style"); styleEl.type = "text/css"; styleEl.media = "screen"; styleEl.innerHTML = '.fonts-loaded .post__flow, .fonts-loaded .post__title, .fonts-loaded .post__title_link { font-family: Arial, \'Helvetica Neue\' ,Helvetica, sans-serif !important; } .post__flow, .post__title, .post__title_link {font-size: 20px !important; font-family: Arial, \'Helvetica Neue\' ,Helvetica, sans-serif !important; }'; document.getElementsByTagName('head')[0].appendChild(styleEl); var last = document.createElement('li'), article = document.createElement('article'), header = document.createElement('header'), time = document.createElement('span'); last.setAttribute('id', 'last_id'); last.setAttribute('class', 'content-list__item content-list__item_post'); last.setAttribute('style', 'display:none;'); article.setAttribute('class', 'post post_preview'); header.setAttribute('class', 'post post__meta'); time.setAttribute('class', 'post__time'); time.innerHTML = '20 января 2015 в 00:01'; header.appendChild(time); article.appendChild(header); last.appendChild(article); document.getElementsByClassName('content-list_posts')[0].appendChild(last); habr.feed('geektimes.ru'); }, feed: function(host) { var href = location.href; href = href.replace('habrahabr.ru',host); GM.xmlHttpRequest({ method: "GET", url: href, onload: function(response) { if (response.readyState == 4) { var html = document.createElement('div'); var https = (response.responseText).replace(/http:\/\//g, 'https://'); html.innerHTML = https; var posts = html.getElementsByClassName('content-list__item_post'); for (var i = 0; i < posts.length; i++) { var post = document.createElement('li'); post.setAttribute('id', posts[i].id); post.setAttribute('class', 'content-list__item content-list__item_post'); post.innerHTML = posts[i].innerHTML; var date; if (post.getElementsByClassName('published').length > 0) { date = post.getElementsByClassName('published')[0].innerHTML; } else if (post.getElementsByClassName('post__time_published').length > 0) { date = post.getElementsByClassName('post__time_published')[0].innerHTML; } else if (post.getElementsByClassName('post__time').length > 0) { date = post.getElementsByClassName('post__time')[0].innerHTML; } else if (post.getElementsByClassName('megapost-head__meta').length > 0) { var meta = document.createElement('div'); meta.innerHTML = post.getElementsByClassName('megapost-head__meta')[0].innerHTML; date = meta.getElementsByClassName('list__item')[0].innerHTML; } else { continue; } var postDate = habr.getDate(date); if ((post.getElementsByClassName('title').length > 0)) { post.getElementsByClassName('title')[0].setAttribute('style','padding-right:71px;'); } if ((post.getElementsByClassName('post__title').length > 0)) { post.getElementsByClassName('post__title')[0].setAttribute('style','padding-right:71px;'); } if ((post.getElementsByClassName('favorite').length > 0)) { post.getElementsByClassName('favorite')[0].parentNode.removeChild(post.getElementsByClassName('favorite')[0]); } if ((post.getElementsByClassName('js-plus').length > 0)) { post.getElementsByClassName('js-plus')[0].parentNode.removeChild(post.getElementsByClassName('js-plus')[0]); } if ((post.getElementsByClassName('js-minus').length > 0)) { post.getElementsByClassName('js-minus')[0].parentNode.removeChild(post.getElementsByClassName('js-minus')[0]); } if ((post.getElementsByClassName('plus').length > 0)) { post.getElementsByClassName('plus')[0].parentNode.removeChild(post.getElementsByClassName('plus')[0]); } if ((post.getElementsByClassName('minus').length > 0)) { post.getElementsByClassName('minus')[0].parentNode.removeChild(post.getElementsByClassName('minus')[0]); } if ((post.getElementsByClassName('post-stats__item_voting-wjt').length > 0)) { post.getElementsByClassName('post-stats__item_voting-wjt')[0].parentNode.removeChild(post.getElementsByClassName('post-stats__item_voting-wjt')[0]); } if ((post.getElementsByClassName('bookmark-btn_post').length > 0)) { post.getElementsByClassName('bookmark-btn_post')[0].parentNode.removeChild(post.getElementsByClassName('bookmark-btn_post')[0]); } habr.addChild(post.innerHTML, postDate, host, post.id); } } } }); }, addChild: function(data, time, host, id) { var posts = document.getElementsByClassName('content-list__item_post'); for (var i = 0; i < posts.length; i++) { var date; if (posts[i].getElementsByClassName('published').length > 0) { date = posts[i].getElementsByClassName('published')[0].innerHTML; } else if (posts[i].getElementsByClassName('post__time_published').length > 0) { date = posts[i].getElementsByClassName('post__time_published')[0].innerHTML; } else if (posts[i].getElementsByClassName('post__time').length > 0) { date = posts[i].getElementsByClassName('post__time')[0].innerHTML; } else if (posts[i].getElementsByClassName('megapost-head__meta').length > 0) { var meta = document.createElement('div'); meta.innerHTML = posts[i].getElementsByClassName('megapost-head__meta')[0].innerHTML; date = meta.getElementsByClassName('list__item')[0].innerHTML; } else { continue; } var postDate = habr.getDate(date); var postAdd = document.createElement('li'); postAdd.setAttribute('class', 'content-list__item content-list__item_post'); postAdd.setAttribute('id', id); postAdd.setAttribute('style', 'background:url("https://' + host + '/images/logo.svg") right top no-repeat; background-size: 71px;'); postAdd.innerHTML = data; if (time >= postDate) { document.getElementsByClassName('content-list_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();