-
-
Save extensionsapp/946a14d5c820d57ac7c4 to your computer and use it in GitHub Desktop.
// ==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(); |
И вообще, залейте на greasefork и openuserjs (умеют из гитхаб-репозитория брать, включая гисты, но лучше сделать полноценный репозиторий, так как в них есть хуки)
Заменял 2 строчки
var html = document.createElement('div');
html.innerHTML = response.responseText;
на одну
var html = GM_safeHTMLParser(response.responseText);
Не хочет работать.
В Google Chrome последний как ставить? Он по умолчанию не разрешает ставить расширения не из магазина.
Устанавливаем это расширение (обезьянка):
Opera - https://addons.opera.com/ru/extensions/details/violent-monkey/
Mozilla - https://addons.mozilla.org/ru/firefox/addon/greasemonkey/
Chrome - https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo
Safari - http://8-p.info/greasekit/
Затем нажать Raw на этой странице вверху или установить через openuserjs - https://openuserjs.org/scripts/extensionsapp/habrahabr-userscript
Есть же GM_safeHTMLParser