Remove Social Media for github.com

This userscript removes the "x followers", "y following" and "Set Status" fields on your own github.com profile page. This is just visual.

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği yüklemek için Tampermonkey gibi bir uzantı yüklemeniz gerekir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

Bu stili yüklemek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için Stylus gibi bir uzantı kurmanız gerekir.

Bu stili yükleyebilmek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı kurmanız gerekir.

Bu stili yükleyebilmek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name         Remove Social Media for github.com
// @description  This userscript removes the "x followers", "y following" and "Set Status" fields on your own github.com profile page. This is just visual.
// @author       ths197
// @license      BSD-3-Clause
// @namespace    https://greasyfork.org/en/users/1451968-ths197
// @include      https://github.com
// @include      https://github.com/*
// @noframes
// @run-at       document-start
// @version 0.0.1.20251021132406
// ==/UserScript==

"use strict";

// conditions

const isOnLoginUsersHomePage = () => document.body.classList.contains("mine");

var state = undefined;

const isChanged = () => !state?.isConnected;

// getting and removing

const getProfile = () =>
  document.body.getElementsByClassName("js-profile-editable-replace")[0];

const socialMediaUrlOptions = ["followers", "following"];

const removeSocialMediaButtons = function (node) {
  const links = Array.from(node.getElementsByTagName("a"));
  const anySocialMediaLink = links.find((node) =>
    socialMediaUrlOptions.some((option) =>
      new URLSearchParams(new URL(node.href).search).has("tab", option)
    )
  );
  anySocialMediaLink?.parentElement.remove();
  Array.from(node.getElementsByClassName("user-status-container")).forEach(
    (statusContainer) => statusContainer.remove()
  );
};

// applying

const applyChanges = function () {
  if (isOnLoginUsersHomePage()) {
    state = getProfile();
    if (state != null) {
      removeSocialMediaButtons(state);
    }
  }
};

// setting stuff up (boring)

const innerObserver = new MutationObserver(function () {
  if (isChanged()) {
    applyChanges();
  }
});

const outerObserver = new MutationObserver(function () {
  if (isChanged()) {
    applyChanges();
    attachInnerObserver();
  }
});

const attachInnerObserver = function () {
  const profile = getProfile();
  if (profile != null) {
    innerObserver.observe(profile.parentElement, {
      subtree: false,
      childList: true,
    });
  }
};

const attachOuterObserver = () =>
  outerObserver.observe(document.body, { subtree: false, childList: true });

const init = function () {
  applyChanges();
  attachOuterObserver();
  attachInnerObserver();
};

if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", init);
} else {
  init();
}