Github - Hide bots and github-actions from dashboards

Minimizes pushs and commits from github actions and bots from github.com dashboard

Install this script?
Author's suggested script

You may also like Github Old Feed.

Install this script
  1. // ==UserScript==
  2. // @name Github - Hide bots and github-actions from dashboards
  3. // @description Minimizes pushs and commits from github actions and bots from github.com dashboard
  4. // @namespace cuzi
  5. // @author cuzi
  6. // @version 1.8
  7. // @copyright 2020, cuzi (https://openuserjs.org/users/cuzi)
  8. // @license GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt
  9. // @icon https://raw.githubusercontent.com/hfg-gmuend/openmoji/master/color/72x72/E045.png
  10. // @match https://github.com/
  11. // @match https://github.com/dashboard-feed
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. /* jshint asi: true, esversion: 8 */
  16.  
  17. (function () {
  18. 'use strict'
  19.  
  20. document.head.appendChild(document.createElement('style')).innerHTML = `
  21. .Details:hover .newexpanderbutton .Link--secondary {
  22. color: var(--color-accent-fg) !important;
  23. }
  24. `
  25.  
  26. function unhideBot (ev) {
  27. const div = this
  28. div.classList.add('shotBot')
  29. div.removeEventListener('click', unhideBot)
  30. div.style.fontSize = ''
  31. if (div.querySelector('.no-border-bottom')) {
  32. div.querySelector('.no-border-bottom').classList.replace('no-border-bottom', 'border-bottom')
  33. }
  34. div.querySelector('.Box').style.display = ''
  35. if (div.querySelector('.body')) {
  36. div.querySelector('.body').style.height = ''
  37. div.querySelector('.body .d-flex').style.padding = ''
  38. } else {
  39. div.querySelector('.d-flex').style.padding = ''
  40. }
  41. div.querySelector('img.avatar').height = '32'
  42. div.querySelector('img.avatar').width = '32'
  43. div.style.cursor = ''
  44. if (div.querySelector('.newexpanderbutton')) {
  45. div.querySelector('.newexpanderbutton').remove()
  46. }
  47. }
  48.  
  49. function hideDiv (div, summary) {
  50. const expandButton = document.querySelector('button.js-details-target:not(.Header-link)[aria-expanded="false"]')
  51. div.style.fontSize = '10px'
  52. if (div.querySelector('.border-bottom')) {
  53. div.querySelector('.border-bottom').classList.replace('border-bottom', 'no-border-bottom')
  54. }
  55. div.querySelector('.Box').style.display = 'none'
  56. if (div.querySelector('.body')) {
  57. div.querySelector('.body').style.height = '22px'
  58. div.querySelector('.body .d-flex').style = 'padding: 0px !important;'
  59. } else {
  60. div.querySelector('.d-flex').style = 'padding: 0px !important;'
  61. }
  62. div.querySelector('img.avatar').height = '20'
  63. div.querySelector('img.avatar').width = '20'
  64. div.style.cursor = 'row-resize'
  65. div.addEventListener('click', unhideBot)
  66. const line = div.querySelector('.Details .flex-column .flex-justify-between.flex-items-baseline')
  67. if (line && expandButton && !line.querySelector('button.js-details-target')) {
  68. const newExpandButton = document.createElement('button')
  69. line.appendChild(newExpandButton)
  70. newExpandButton.outerHTML = expandButton.outerHTML.replace('js-details-target', 'js-details-target newexpanderbutton')
  71. }
  72. const aLinkPrimary = div.querySelector('.no-underline a.Link--primary')
  73. if (summary && aLinkPrimary && !div.querySelector('.summaryspan')) {
  74. const summarySpan = document.createElement('span')
  75. summarySpan.classList.add('summaryspan')
  76. summarySpan.appendChild(document.createTextNode(summary.replace(/\s+to\s*$/, '')))
  77. aLinkPrimary.parentNode.appendChild(summarySpan)
  78. }
  79. }
  80.  
  81. function hideBots () {
  82. // Hide single push events
  83. document.querySelectorAll(`
  84. #dashboard div.push:not(.shotBot),
  85. #dashboard div[classes*=push]:not(.shotBot),
  86. #dashboard div.body:not(.shotBot),
  87.  
  88. [data-repository-hovercards-enabled] div.push:not(.shotBot),
  89. [data-repository-hovercards-enabled] div[classes*=push]:not(.shotBot),
  90. [data-repository-hovercards-enabled] div.body:not(.shotBot)
  91. `).forEach(function (div) {
  92. const label = div.querySelector('.body .d-flex .d-flex .Label')
  93. const isAppUrl = div.querySelector('.body .d-flex .d-flex a.Link--primary[href^="/apps/"]')
  94. if (isAppUrl || (label && label.textContent === 'bot')) {
  95. hideDiv(div)
  96. }
  97. })
  98. // Hide grouped items
  99. document.querySelectorAll(`
  100. #dashboard div.body:not(.shotBot),
  101. [data-repository-hovercards-enabled] div.body:not(.shotBot)
  102. `
  103. ).forEach(function (div) {
  104. const isAppUrl = div.querySelector('.js-news-feed-event-group .d-inline-block[href^="/apps"] .avatar')
  105. if (isAppUrl) {
  106. const summary = div.querySelector('.dashboard-rollup-item>span') ? div.querySelector('.dashboard-rollup-item>span').textContent : null
  107. hideDiv(div, summary)
  108. }
  109. })
  110. }
  111.  
  112. hideBots()
  113. const iv = window.setInterval(hideBots, 200)
  114. window.setTimeout(() => window.clearInterval(iv), 5000)
  115. window.setInterval(hideBots, 5000)
  116. })()