// ==UserScript==
// @name Hide BPL Trolls and other junk
// @namespace ffmike
// @description Cleanup new BPL
// @grant none
// @include https://bplight.wpengine.com/*
// @include https://backpackinglight.com/*
// @version 6
// @domain www.backpackinglight.com
// @license CC0 1.0; https://creativecommons.org/publicdomain/zero/1.0/
// ==/UserScript==
// In part shamelessly based on https://greasyfork.org/en/scripts/48-maximumpc-troll-remover/code
$(function () {
// Utility function to inject global CSS into HEAD tag
function addGlobalStyle(css) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
// Emulate the GM_*value APIs - see https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
const __GM_STORAGE_PREFIX = [
'', GM_info.script.namespace, GM_info.script.name, ''].join('***');
function GM_deleteValue(aKey) {
'use strict';
localStorage.removeItem(__GM_STORAGE_PREFIX + aKey);
}
function GM_getValue(aKey, aDefault) {
'use strict';
let val = localStorage.getItem(__GM_STORAGE_PREFIX + aKey)
if (null === val && 'undefined' != typeof aDefault) return aDefault;
return val;
}
function GM_listValues() {
'use strict';
let prefixLen = __GM_STORAGE_PREFIX.length;
let values = [];
let i = 0;
for (let i = 0; i < localStorage.length; i++) {
let k = localStorage.key(i);
if (k.substr(0, prefixLen) === __GM_STORAGE_PREFIX) {
values.push(k.substr(prefixLen));
}
}
return values;
}
function GM_setValue(aKey, aVal) {
'use strict';
localStorage.setItem(__GM_STORAGE_PREFIX + aKey, aVal);
}
function GM_getResourceURL(aName) {
'use strict';
return 'greasemonkey-script:' + GM_info.uuid + '/' + aName;
}
// Hide various clutter, including the subscription blocks and forum instructions
$("#text-28").hide();
$("#text-29").hide();
$("#text-32").hide();
$("#text-34").hide();
$("#menu-item-15").hide();
$(".bbp-header").hide();
$(".bbp-footer").hide();
// Hide the 'related posts' display
addGlobalStyle('div.zem_rp_content { display: none ! important; }');
// Smaller darker fonts and generally condensed presentation
addGlobalStyle("body, #bbpress-forums, #bbpress-forums .bbp-reply-content, #bbpress-forums .bbp-reply-content p {font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif !important; font-weight: 400 !important; font-size: 11px !important; color: black !important; line-height: 1.25 !important; }")
addGlobalStyle("article.forum h1.entry-title, article.topic h1.entry-title, article.reply h1.entry-title, article.bp_members h1.entry-title {font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif !important; font-size: 18px !important;color: black !important;}");
addGlobalStyle('h1 {margin-bottom: 6px; }');
addGlobalStyle('.entry-content code {color: black !important; }');
addGlobalStyle('.entry-content a {color: black !important; }');
addGlobalStyle('.entry-content a.bbp-topic-permalink {font-weight: 600 !important; }');
addGlobalStyle('.bbp-reply-author {font-size: 8px !important; padding-bottom: 2px !important; }');
addGlobalStyle('.bbp-reply-content {padding-bottom: 0px !important; }');
addGlobalStyle('.bbp-author-role {font-size: 8px !important; }');
addGlobalStyle('.bbp-user-nicename {margin-bottom: 0px !important; }');
addGlobalStyle('.entry {margin-bottom: 2px !important; }');
addGlobalStyle('.entry-content ol, .entry-content p, .entry-content ul, .quote-caption {margin-bottom: 3px !important;}');
addGlobalStyle('#bbpress-forums li.bbp-body ul.forum, #bbpress-forums li.bbp-body ul.topic {padding: 2px !important;}');
addGlobalStyle('#bbpress-forums ul.bbp-replies {font-size: 11px !important; }');
addGlobalStyle('#bbpress-forums a.bbp-reply-permalink {margin-top: 0px !important; }');
// Indent paragraphs
addGlobalStyle('.bbp-reply-content p {text-indent: 15px !important;}');
// Hide small avatars on topic list
addGlobalStyle('.bbp-topic-started-by .bbp-author-avatar, .bbp-topic-freshness-author .bbp-author-avatar {display: none !important; }');
// Make links visible
addGlobalStyle('a {border-bottom: .0625rem solid skyblue !important; }');
// Much less subtle even/odd row highlighting
addGlobalStyle('#bbpress-forums div.odd, #bbpress-forums ul.odd {background-color: rgba(83, 207, 75, 0.27) !important}');
// Style for stale topic marking
addGlobalStyle('#bbpress-forums ul.stale {background-color: rgba(185, 207, 75, 0.28) !important}');
// Hide the WordPress minibar
$('#wpadminbar').hide();
// Get rid of some wasted space
addGlobalStyle('html {margin-top: 0px !important; }');
addGlobalStyle('.site-container {margin-top: 0px !important; padding-top: 2px !important; }');
addGlobalStyle('.site-inner {padding-top: 0px !important;}');
// Move and shrink the navigation. Best on wide screens.
addGlobalStyle('.nav-primary {position: absolute !important; top: 0px !important; left: 0px !important;}');
addGlobalStyle('.nav-secondary {position:absolute !important; top: 33px !important;}');
//addGlobalStyle('.mega-sticky {margin-top: -10px !important; position: absolute !important; width: 500px !important;}')
addGlobalStyle('.genesis-nav-menu {font-size: 9px !important; }');
addGlobalStyle('.genesis-nav-menu a {padding: 7px !important; }');
//addGlobalStyle('a.mega-menu-link {font-size: 9px !important; }');
$('.nav-menu-bpl-logo-type-bold').html('BPL');
$('.nav-menu-bpl-logo-type-ultralight').hide();
addGlobalStyle('span.insider-icon::before {padding-bottom: 0px !important; margin-top: -2px !important; }');
// Get rid of the Gear Deals link and the horrible spinning icon with it
$('#menu-item-3367769').hide();
// Nuke the social media links
//$('#mega-menu-item-1141556').hide();
//$('#mega-menu-item-1141557').hide();
//$('#mega-menu-item-1141558').hide();
// Hide breadcrumbs
$('.bbp-breadcrumb').hide();
// If there are users you don't ever want to see posts from, add their handles to this list
var joList = ["tipiwalter",
"rosyfinch",
];
var joLength = joList.length;
var numJoComments = 0;
var thisJo, userName, ref;
// Look at all the links on the page and hide the ones I don't care about
$("a").each(function(index, value)
{
ref = value.href;
// Get rid of Gear Swap posts on Recent Forums Topics
// Not needed now that Gear Swap is on its own page, but this is how to hide a forum's links
// if (ref == 'https://backpackinglight.com/forums/forum/commerce/gear-swap/')
// {
// $(this).closest('.topic').hide();
// }
// Get rid of posts from trolls
//var pieces = ref.split('/');
//userName = pieces[pieces.length - 2];
//for(var i=0; i<joLength; i++)
//{
// if(userName == joList[i])
// {
// console.log('Hiding ' + userName);
// $(this).closest('.reply').hide();
// break;
// }
//}
});
// Add styling to topics with no new content since last visit
// If we're on a forum index, should be able to grab the forum ID
if ($('ul.bbp-topics').length > 0) {
forum_id = $('ul.bbp-topics')[0].id;
// Figure out where we were the last time we were on this topic page
var last_most_recent_reply = GM_getValue(forum_id + 'most_recent_reply', 0);
// console.log(last_most_recent_reply);
var most_recent_parts;
var most_recent_reply;
if ($('li.bbp-topic-freshness a').length > 0) {
topic_links = $('li.bbp-topic-freshness > a');
// If on forum index, save most recent reply ID
// NOTE: Unfortunately we can't get the reply ID of a topic with no replies yet
for(var i=0; i<topic_links.length; i++) {
most_recent_parts = topic_links[i].href.split('-');
most_recent_reply = most_recent_parts[most_recent_parts.length - 1];
if (!isNaN(parseInt(most_recent_reply))) {
// console.log('setting ' + most_recent_reply);
GM_setValue(forum_id + 'most_recent_reply', parseInt(most_recent_reply));
break;
}
}
// Now set styling on the topics with no new replies
for(var i=0; i<topic_links.length; i++) {
most_recent_parts = topic_links[i].href.split('-');
most_recent_reply = most_recent_parts[most_recent_parts.length - 1];
if (!isNaN(parseInt(most_recent_reply))) {
if(parseInt(most_recent_reply) <= last_most_recent_reply) {
topic = topic_links[i].closest('.topic');
domTopic = document.getElementById(topic.id)
current_class = domTopic.getAttribute('class')
domTopic.setAttribute('class', current_class + ' stale');
}
}
}
}
}
});