// ==UserScript==
// @id SoHabr
// @name Всегдабр
// @version 0.1.4
// @namespace sohabr
// @author leenr <i@leenr.ru> https://sohabr.net/vsegdabr
// @author i20664d
// @description Позволяет быстро перейти на СоХабр/SavePearlHarbor, если просматриваемый пост на Хабрахабре, Гиктаймсе или Мегамозге недоступен.
// @include habrahabr.ru/company/post/*
// @include habrahabr.ru/post/*
// @include geektimes.ru/company/post/*
// @include geektimes.ru/post/*
// @include megamozg.ru/company/post/*
// @include megamozg.ru/post/*
// @run-at document-end
// @icon https://greasyfork.org/system/screenshots/screenshots/000/002/738/original/sohabr.png
// @resource necontabr https://greasyfork.org/system/screenshots/screenshots/000/002/740/original/necontabr.png
// @resource animation https://greasyfork.org/system/screenshots/screenshots/000/002/741/thumb/animated.png
// @resource razdolbabr https://greasyfork.org/system/screenshots/screenshots/000/002/739/original/razdolbabr.png
// @require https://greasyfork.org/scripts/14604-scriptsettings/code/ScriptSettings.js
// @noframes
// ==/UserScript==
'use strict';
Notification.requestPermission();
const notifId=('sohabr-всегдабр-скрипт'+Math.random())+Math.random();
let c = new ScriptSettings({
mode : [
'auto',//Автоматически переходить на СоХабр/SavePearlHarbor
'manual',//Отобразить информацию о посте (заголовок и дату публикации), а также ссылки на СоХабр и SavePearlHarbor
'off'//Не предпринимать никаких действий
],
immediatelyRedirect : [!1, 'sohabr', 'savepearlharbor'],
dontCheckout : !1,
checkoutSoHabr : !0,
checkoutSavePearlHarbor : !0,
showPostInfo : !0//Показывать заголовок поста и дату его публикации
});
function d(a, e) {
var b = document.createElement('A');
b.href = a;
b.textContent = 'Проследовать на ' + e;
document.body.appendChild(b);
return b;
}
function f() {
GM_xmlHttpRequest({
method : 'GET',
url : 'https://sohabr.net/vsegdabr/check/post/' + g + ':' + h + '/',
onload(a) {
a = JSON.parse(a);
document.getElementById('checking').style.display='none';
var e = !1,
b = null;
'sohabr' in a && (d(a.sohabr.url, 'СоХабр'), e = !0, b = a.sohabr.url);
'savepearlharbor' in a && (d(a.savepearlharbor.url, 'SavePearlHarbor'), e = !0, null == b && (b = a.savepearlharbor.url));
if (e) {
if ('manual' != c.mode || c.showPostInfo) {
document.createElement('time').textContent = a.date_humanlystr,
document.createElement('h1').textContent = a.title;
}
'auto' == c.mode && (window.top.location.href = b);
} else {
new Notification('Никогдабр',{body:'К сожалению, Всегдабр не может найти этот пост... :(', icon:GM_getResourceUrl('razdolbabr'), lang:'ru',tag:notifId});
}
},
onerror() {
new Notification('Неконтабр',{body:'Не получается проверить наличие резервной копии', icon:GM_getResourceUrl('necontabr'), lang:'ru',tag:notifId});
}
});
}
{
if (document.getElementById('reg-wrapper')) {
var k = location.pathname.match(/\/(?:company\/.+\/blog|post)?\/(\d+)\//);
if (null != k) {
var g = null;
switch (location.hostname) {
case 'habrahabr.ru':
g = 'habr';
break;
case 'geektimes.ru': ;
case 'geektimes.com':
g = 'gt';
break;
case 'megamozg.ru':
g = 'mm';
}
var h = Number.parseInt(k[1]),
l = c.mode;
if (NaN !== h) {
var m = d('https://sohabr.net/' + g + '/post/' + h + '/', 'СоХабр'),
n = d('http://savepearlharbor.com/?p=' + h, 'SavePearlHarbour');
if ('auto' == l && c.immediatelyRedirect) {
var p = null;
'sohabr' == c.immediatelyRedirectTo ? p = m.href : 'habr' == g && (p = n.href);
if (null != p) {
window.top.location.replace(p);
break a;
}
l = 'manual';
}
if ('auto' == l || 'manual' == l && !c.dontCheckout) {
new Notification('ГдеХабр?',{body:'Проверка наличия статьи в других источниках', icon:GM_getResourceUrl('animation'), lang:'ru',tag:notifId});
f();
}
} else {
new Notification('Раздолбабр',{body:'Почему-то ид статьи не является числом', icon:GM_getResourceUrl('razdolbabr'), lang:'ru',tag:notifId});
}
}
}
};