GreasyFork Total Scripts

Shows a user's total scripts count on GreasyFork.

As of 2022-08-10. See the latest version.

  1. // ==UserScript==
  2. // @name GreasyFork Total Scripts
  3. // @namespace -
  4. // @version 3.0.1
  5. // @description Shows a user's total scripts count on GreasyFork.
  6. // @author NotYou
  7. // @include *greatest.deepsurf.us/*/users/*
  8. // @include *greatest.deepsurf.us/*/scripts*
  9. // @include *sleazyfork.org/*/users/*
  10. // @include *sleazyfork.org/*/scripts*
  11. // @license GPL-3.0-or-later
  12. // @run-at document-end
  13. // @grant none
  14. // ==/UserScript==
  15.  
  16. const
  17. select = s => document.querySelector(s),
  18. selectAll = s => document.querySelectorAll(s),
  19. addStyle = css => document.documentElement.children[0].insertAdjacentHTML('beforeend', `<style>${css.trim()}</style>`),
  20. totalCounter = (s, color) => {
  21. let sel = select(s)
  22. sel.style.outline = `${color} 2px solid`
  23. sel.children[0].style.background = `${color}`
  24. },
  25. ifElCheck = (var1, var2) => {
  26. if(var1 < 1) return
  27. if (var1 == 1) totalCounter(var2, 'rgb(125, 125, 125)')
  28. else if(var1 >= 100) totalCounter(var2, 'rgb(185, 16, 16)')
  29. else if(var1 >= 50) totalCounter(var2, 'rgb(185, 87, 16)')
  30. else if(var1 >= 25) totalCounter(var2, 'rgb(185, 159, 16)')
  31. else if(var1 >= 10) totalCounter(var2, 'rgb(21, 185, 16)')
  32. else if(var1 >= 5) totalCounter(var2, 'rgb(16, 185, 153)')
  33. else if(var1 > 1) totalCounter(var2, 'rgb(16, 42, 185)')
  34. else if(!var1||var1 < 0) totalCounter(var2, 'rgb(185, 16, 16)')
  35. },
  36. currentURL = new URL(location.href)
  37.  
  38. Element.prototype.appendHTML = function(h) {
  39. this.insertAdjacentHTML('beforeend', h)
  40. }
  41.  
  42. Element.prototype.prependHTML = function(h) {
  43. this.insertAdjacentHTML('afterbegin', h)
  44. }
  45.  
  46. const csstotal = selectAll('[data-css-available-as-js="true"]').length,
  47. libtotal = selectAll('#user-library-script-list > li').length,
  48. jstotal = selectAll('#user-script-list > [data-css-available-as-js="false"]').length,
  49. jstotalsearch = selectAll('#browse-script-list > li[data-script-language="js"]').length,
  50. csstotalsearch = selectAll('#browse-script-list > [data-css-available-as-js="true"]').length,
  51. sensitive = selectAll('li[data-sensitive="true"]').length,
  52. SIDEBARRED = select('.sidebarred-main-content > p')
  53.  
  54. if(currentURL.searchParams.has('q')) {
  55. addStyle(`
  56. #t-counters {
  57. display: inline-flex;
  58. font-weight: 800;
  59. }
  60. .total-count {
  61. font-size: 15px;
  62. border-radius: 3px;
  63. background: rgb(45, 45, 45);
  64. color: rgb(255, 255, 255);
  65. margin: 0 4px;
  66. }
  67.  
  68. .total-count > span:first-child {
  69. width: 8px;
  70. height: 8px;
  71. display: inline-flex;
  72. margin-bottom: 1px;
  73. margin-left: 4px;
  74. border-radius: 50%;
  75. }
  76.  
  77. .total-count > span:last-child {
  78. margin: 0 4px;
  79. }
  80. `)
  81. SIDEBARRED.appendHTML(`<div id="t-counters"></div>`)
  82. const COUNTERS = select('#t-counters'), TS = '#t-scripts', TC = '#t-css',
  83. createCounterDOM = (id, variable, name) => {
  84. if(!variable||variable < 1) return
  85. COUNTERS.appendHTML(`<span id="t-${id}" class="total-count"><span></span><span>${variable ? variable : 'Unexpected'} ${variable ? name : 'Error'}</span></span>`)
  86. }, createCounter = (id, var1, name, var2) => {
  87. createCounterDOM(id, var1, name)
  88. ifElCheck(var1, var2)
  89. }
  90. createCounter('scripts', jstotalsearch, 'Scripts', TS)
  91. createCounter('css', csstotalsearch, 'Styles', TC)
  92. }
  93.  
  94. var scriptHeader = select('div.sidebarred-main-content h3:first-child')
  95.  
  96. if(scriptHeader) {
  97. addStyle(`
  98. #t-counters {
  99. display: inline-flex;
  100. }
  101. .total-count {
  102. font-size: 15px;
  103. border-radius: 3px;
  104. background: rgb(45, 45, 45);
  105. color: rgb(255, 255, 255);
  106. margin: 0 4px;
  107. }
  108.  
  109. .total-count > span:first-child {
  110. width: 8px;
  111. height: 8px;
  112. display: inline-flex;
  113. margin-bottom: 1px;
  114. margin-left: 4px;
  115. border-radius: 50%;
  116. }
  117.  
  118. .total-count > span:last-child {
  119. margin: 0 4px;
  120. }
  121. `)
  122. scriptHeader.appendHTML(`<div id="t-counters"></div>`)
  123. const COUNTERS = select('#t-counters'), TS = '#t-scripts', TC = '#t-css', TL = '#t-libs',
  124. createCounterDOM = (id, variable, name) => {
  125. if(!variable||variable < 1) return
  126. COUNTERS.appendHTML(`<span id="t-${id}" class="total-count"><span></span><span>${variable ? variable : 'Unexpected'} ${variable ? name : 'Error'}</span></span>`)
  127. }, createCounter = (id, var1, name, var2) => {
  128. createCounterDOM(id, var1, name)
  129. ifElCheck(var1, var2)
  130. }
  131. createCounter('scripts', jstotal, 'Scripts', TS)
  132. createCounter('css', csstotal, 'Styles', TC)
  133. createCounter('libs', libtotal, 'Libs', TL)
  134. }
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.