NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Pikabu helper
// @namespace https://github.com/thomas-ashcraft
// @version 0.2.4
// @description Улучшайзер маффинов 3000
// @author Thomas Ashcraft
// @match *://pikabu.ru/*
// @match *://pikabu.ru//*
// @icon http://cs.pikabu.ru/favicon2x.ico
// @grant none
// @noframes
// ==/UserScript==
(function() {
var version = "0.2.4";
var console_info=["%c pikabu🍩 %chelper v"+version+" %c http://pikabu.ru ","background: #79c36c;color: #FFFFFF", "background: #79c36c;color: #ffffff",""];
console.log.apply(console,console_info);
var DEBUG = false;
var broken_domains_list = [
"digitalhomicide.ninja",
"hrkgame.com",
"woobox.com",
"whosgamingnow.net",
"giveawayoftheday.com",
"dlh.net"
];
var url = window.location.href;
if(DEBUG) console.log("🐾 url: " + url);
var path = window.location.pathname;
path = path.replace(/\/+/g, "/");
if(DEBUG) console.log("🐾 path: " + path);
var referrer = document.referrer;
if(DEBUG) console.log("🐾 referrer: " + referrer);
// Embed style
var pikabu_helper_style = `
.ph_user_karma_bar {border-color: #606050; border-radius: 20px; border-style: solid; border-width: 0 2px; box-shadow: 0 0 1px 0 #000000 inset; display: inline-block; text-align: center; text-shadow: -1px -1px 2px #ffffff, 1px 1px 2px #ffffff; vertical-align: middle; white-space: nowrap; width: 0px; transition: width 0.8s ease-in 0.25s;}
.ph_fixed_link_check{}
`;
document.head.appendChild(document.createElement('style')).innerHTML=pikabu_helper_style.replace(/([\s\S]*?return;){2}([\s\S]*)}/,'$2');
// TODO: update scrolling to pointing on element itself
function scrl (target) {
$('html, body').animate({scrollTop: target.offset().top-100}, 800);
//target.effect("highlight", "800");
}
function add_user_karma_bar() {
user_info = $("div.b-user-profile div:contains('пикабушни')").text();
pm_counter = /(\d+) плюс.{0,2}\s*(\d+) минус.{0,2}/.exec(user_info);
pluses = parseInt(pm_counter[1], 10);
minuses = parseInt(pm_counter[2], 10);
//pluses = 0; //DEBUG
//minuses = 2; //DEBUG
var user_karma_ratio_percent = 0;
$("div.b-user-profile div:contains('пикабушни') br:last").before(" <br><span class='ph_user_karma_bar'></span>");
var ph_user_karma_bar_borders_width = parseInt($(".ph_user_karma_bar").css("borderRightWidth"), 10) + parseInt($(".ph_user_karma_bar").css("borderLeftWidth"), 10);
$(".ph_user_karma_bar").width($(".b-user-profile__label:contains('поставил')").width() + $(".b-user-profile__label:contains('поставил')").next().width() - ph_user_karma_bar_borders_width);
if (pluses!=0 && minuses!=0) {
user_karma_ratio_percent = parseFloat((pluses / (pluses+minuses) * 100).toFixed(2), 10);
}
if (pluses==0 && minuses==0) {
$(".ph_user_karma_bar").text("нейтрал");
$(".ph_user_karma_bar").css("background-color", "#c0c0c0");
} else if (pluses==0 && minuses>0) {
$(".ph_user_karma_bar").text("абсолютное зло");
$(".ph_user_karma_bar").css("background-color", "#e89e36");
$(".ph_user_karma_bar").css("box-shadow", "0 0 8px 4px #efd244, 0 0 2px 1px #efd244 inset");
} else if (pluses>0 && minuses==0) {
$(".ph_user_karma_bar").text("длань богов");
$(".ph_user_karma_bar").css("background-color", "#a7d437");
$(".ph_user_karma_bar").css("box-shadow", "0 0 8px 4px #beee44, 0 0 2px 1px #beee44 inset");
} else if (pluses!=0 && minuses!=0) {
if(DEBUG) console.log("user_karma_ratio_percent: " + user_karma_ratio_percent);
$(".ph_user_karma_bar").text("коэффициент: " + (pluses/minuses).toFixed(2));
$(".ph_user_karma_bar").css("background-image", "linear-gradient(90deg, #a7d437 " + user_karma_ratio_percent + "%, #606050 " + user_karma_ratio_percent + "%, #606050 " + (user_karma_ratio_percent+0.6) + "%, #e89e36 0%)");
}
}
function fix_gleam_url() {
var gleam_regex_full_link = /(href=")?(http[s]?:\/\/[gг].?[lл].?[eе]?.?[и]?.?[aа]?.?[mм].{0,3}[iи].?[oо])(\/[\w]{1,7}\/[\w-]+)/i;
var ph_fixed_link_check = ' <span class="ph_fixed_link_check" title="Исправлено">☑️</span>';
$("div.b-story__content p").filter(function () {
return gleam_regex_full_link.test($(this).text());
}).filter(function () {
return !/ph_fixed_link_check/m.test($(this).html());
}).each(function() {
if(DEBUG) console.log("gleam TXT link detected here:");
if(DEBUG) console.log($(this));
gleam_link = gleam_regex_full_link.exec($(this).html());
if(DEBUG) console.log(gleam_link);
if (gleam_link[1] == null) { // if gleam link not clickable (just text)
$(this).html( $(this).html().replace(gleam_link[0], '<noindex><a target="_blank" href="https://gleam.io' + gleam_link[3] + '" rel="nofollow">https://gleam.io' + gleam_link[3] + '</a>' + ph_fixed_link_check + '</noindex>') );
} else { // if gleam link clickable (already html tag)
var gleam_regex_address = new RegExp ('http[s]?:\/\/[gг].?[lл].?[eе]?.?[и]?.?[aа]?.?[mм].?.?[iи].?[oо]\/', 'ig');
$(this).html( $(this).html().replace(gleam_regex_address, 'https://gleam.io/') );
$(this).find("a:contains('gleam')").after(ph_fixed_link_check);
}
});
}
function fix_links() {
if(DEBUG) console.log(broken_domains_list);
all_broken_domains_pattern = "";
$.each(broken_domains_list, function( index, value ) {
if (index != 0) {
all_broken_domains_pattern = all_broken_domains_pattern + '|';
}
all_broken_domains_pattern = all_broken_domains_pattern + '\(' + value.replace(/(?!\w$)[\w]/gi, function(x) {
return x + '.?';
}).replace(/\.\?\./g, function(y) {
return '.{0,3}';
}) + '\)';
});
//if(DEBUG) console.log(all_broken_domains_pattern);
generated_broken_domains_regex = new RegExp (all_broken_domains_pattern, 'i');
if(DEBUG) console.log(generated_broken_domains_regex);
//var all_broken_domains_regex = /(digitalhomicide.{0,3}ninja)|(failmid.{0,3}com)|(hrkgame.{0,3}com)/i;
var ph_fixed_link_check = ' <span class="ph_fixed_link_check" title="Исправлено">☑️</span>';
$("div.b-story__content p").filter(function () {
return generated_broken_domains_regex.test($(this).text());
}).filter(function () {
return !/ph_fixed_link_check/m.test($(this).html());
}).each(function() {
if(DEBUG) console.log("filtered link detected here:");
if(DEBUG) console.log($(this));
broken_domain_detected = generated_broken_domains_regex.exec($(this).html());
if(DEBUG) console.log(broken_domain_detected);
fixed_domain = broken_domain_detected[0].replace(/[^\w-\.]/gi, '');
if(DEBUG) console.log(fixed_domain);
if (fixed_domain == broken_domain_detected[0]) {
if(DEBUG) console.log("nuff to do here");
} else {
if(DEBUG) console.log("lets do this");
broken_domain_pattern = broken_domain_detected[0].replace(/[^\w]/gi, function(y) {
return "\\" + y;
});
broken_link_regex = new RegExp ('\(href="\)?\([\\w-\\/\\.:]+\)\(' + broken_domain_pattern + '\)\([\\w-\\/?=&#]*\)', 'i');
if(DEBUG) console.log(broken_link_regex);
broken_link_detected = broken_link_regex.exec($(this).html());
if(DEBUG) console.log(broken_link_detected);
if (broken_link_detected[1] == null) { // if detected link not clickable (just text)
if(DEBUG) console.log("non-click");
$(this).html( $(this).html().replace(broken_link_detected[0], '<noindex><a target="_blank" href="' + broken_link_detected[2] + fixed_domain + broken_link_detected[4] + '" rel="nofollow">' + broken_link_detected[2] + fixed_domain + broken_link_detected[4] + '</a>' + ph_fixed_link_check + '</noindex>') );
} else { // if detected link clickable (already html tag)
if(DEBUG) console.log("already tag");
$(this).html( $(this).html().replace(new RegExp (broken_domain_pattern, 'ig'), fixed_domain) );
$(this).find("a:contains('" + fixed_domain + "')").after(ph_fixed_link_check);
}
}
});
}
function move_user_profile_tools() {
$(".sub_init").parent("div").parent("div").append( $(".user-profile-tools"));
$(".user-profile-tools").css("width", $(".sub_init").css("width"));
$(".user-profile-tools").css("text-align", "center");
$(".user-profile-tools a[data-action='ignore+']").css("color", "#f75c48").text("в игнор-лист");
$(".user-profile-tools a[data-action='ignore-']").css("color", "#78c062").text("из игнор-листа");
}
function instant_community_search() {
var community_search_submit;
$("#cs_text").on("input", function() {
clearTimeout(community_search_submit);
community_search_submit = setTimeout(function() {
$("#cs_text").trigger("submit");
}, 400);
});
//$("#cs_text").off( "change" );
}
function all_feeds_functions() {
//fix_gleam_url();
fix_links();
$(document).ajaxComplete(function(event, xhr, settings) {
if (settings.url.indexOf("twitmode=1") >=0) {
fix_links();
}
});
}
switch (true) {
case /^\/story\/.*/.test(path):
if(DEBUG) console.log("SWITCH: 🐈 Time to fucking awesome stories");
//fix_gleam_url();
fix_links();
break;
case /^\/profile\/.*/.test(path):
if(DEBUG) console.log("SWITCH: 👤 Someone's profile");
add_user_karma_bar();
move_user_profile_tools();
all_feeds_functions();
break;
case /^\/best.*/.test(path):
if(DEBUG) console.log("SWITCH: 😎 the best of the best of the best of the...");
all_feeds_functions();
break;
case /^\/new.*/.test(path):
if(DEBUG) console.log("SWITCH: 🌱 fresh");
all_feeds_functions();
break;
case /^\/communities.*/.test(path):
if(DEBUG) console.log("SWITCH: 🖐 leagues ALL");
all_feeds_functions();
instant_community_search();
break;
case /^\/community\/.*/.test(path):
if(DEBUG) console.log("SWITCH: 🖐 league");
all_feeds_functions();
break;
case /^\/hot.*/.test(path):
if(DEBUG) console.log("SWITCH: 📰 main page (HOT)");
//break;
case /\/$/.test(url):
if(DEBUG) console.log("SWITCH: 📰 main page");
all_feeds_functions();
break;
}
// Embed functions to be called directly from the UI in *-monkey installations
function embedFunction(s) {
if(DEBUG) console.log('🔀 embedding: ' + s.name);
document.body.appendChild(document.createElement('script')).innerHTML=s.toString().replace(/([\s\S]*?return;){2}([\s\S]*)}/,'$2');
}
// embed other functions used by UI after loading
embedFunction(scrl);
}(window));