Hide BPL Trolls and other junk

Cleanup new BPL

当前为 2015-12-02 提交的版本,查看 最新版本

// ==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');
               }
             }
          }
       }    
    }
    
});