10

About

Inspired by the reaction to Beta release of Collectives™ on Stack Overflow, I decided to create a small practical solution in the form of a user script.

It will remove almost all traces of Collectives™ on Stack Overflow:

  • Tag-icons on posts.
  • Award icons & small orange affiliation banner on user cards on posts.
  • Box under the user avatar on user profiles.
  • List item saying "X user groups" on user profiles.
  • Box in the home page right sidebar.
  • Answer endorsements ("Answer recommended by ...").

The exception is to the Collectives™ link in the left sidebar and the Collectives™ themselves. I wanted to keep this so that one can still go there and read about them.

Platform

Should work with any user script manager & any browser running JavaScript.
Tested (mostly by 10 Rep) on Windows 10 using

  • Opera, Chrome & Edge with TamperMonkey.
  • Firefox with ViolentMonkey.

Contact

For bugs, please post here. Comments are fine too.

Code

JavaScript using jQuery:

// ==UserScript==
// @name         Stack Collectives Off
// @namespace    scratte-fiddlings
// @version      0.8
// @description  Pretending Collectives don't exist
// @author       Scratte (stackoverflow.com/users/12695027)
// @include      https://stackoverflow.com/*
// @exclude      https://stackoverflow.com/collectives*
// @grant        none
// ==/UserScript==

// NOTE: The script does not remove the "Explore Collectives" on the left sidebar.
//       It's still possible to go to a collectives site and check them out.

(function() {
    'use strict';

    // Start with user profiles (since Stack removed the defining class on the links).
    document.querySelector("a[href*='\/collectives\/']")
           // Another optimization suggested by Oleg Valter
           // https://chat.stackoverflow.com/transcript/message/52657512#52657512
           ?.closest("div.grid--item")
           ?.remove();

    // Suggested by Oleg Valter (https://stackoverflow.com/users/11407695)
    // https://chat.stackoverflow.com/transcript/message/52657173#52657173
    const mostCollectivesStuff =
              [
                  // the collective on the home page right sidebar
                  ".js-join-leave-container",
                  // both 1: the collective icons from posts on the home page
                  //      2: the award icons from user cards on posts
                  "a[href*='\/collectives\/']:not(#nav-collective-discover)",
                  // the particular collective in the sidebar on posts
                  ".sidebar-subcommunity",
              ];

    const postCollectivesStuff =
              [
                  // orange affiliation banner from user profiles on posts
                  ".affiliate-badge",
                  // "Answer recommended by ..."
                  ".js-endorsements",
                  // recognized member icon in comments.
                  "div.comment-body span[title='Recognized Member']"
              ];

    document.querySelectorAll(mostCollectivesStuff.concat(postCollectivesStuff).join()) // "," is default
            .forEach(e => e.remove());

    const removePostCollectives = () => document.querySelectorAll(postCollectivesStuff.join()) // "," is default
            .forEach(e => e.remove());

    // And the list item saying "X user groups" from user profiles
    document.querySelector("ul div[aria-describedby=groups-popover]")
           ?.closest("li.flex--item")
           ?.remove();

    $(document) // needed for it to work with updates as in reviews
        .ajaxComplete((event, request, settings) => {
            removePostCollectives();
         });

})();

Download

GitHub | Install

2
  • You should make this into a gist, tag it with .user.js, so people can simply click/install, as opposed to creating a new script, pasting in code, etc. Commented Sep 27, 2021 at 17:31
  • @ughStackExchange Done. I usually don't do that with less than 100 lines of code. But since you asked :) Commented Sep 27, 2021 at 17:37

1 Answer 1

2

When I turn on your script, I see that it hide the first element of Hot Meta Posts in Sidebar, as below:

Preview

When I turn you script off, everything is fine:

Preview

I face this bug in 0.1 & 0.2 and I am using Firefox 90.0.2.

0

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.