User At Hover - Libreddit

hover at clickable user link to see user flair.

  1. // ==UserScript==
  2. // @name User At Hover - Libreddit
  3. // @version 1.2.0
  4. // @description hover at clickable user link to see user flair.
  5. // @include *://libredd.it*
  6. // @include *://libreddit.spike.codes*
  7. // @include *://libreddit.dothq.co*
  8. // @include *://libreddit.kavin.rocks*
  9. // @include *://reddit.invak.id*
  10. // @include *://reddit.phii.me*
  11. // @include *://lr.riverside.rocks*
  12. // @include *://libreddit.strongthany.cc*
  13. // @include *://libreddit.database.red*
  14. // @include *://libreddit.privacy.com.de*
  15. // @include *://libreddit.domain.glass*
  16. // @include *://libreddit.sugoma.tk*
  17. // @include *://libreddit.jamiethalacker.dev*
  18. // @include *://reddit.artemislena.eu*
  19. // @include *://r.nf*
  20. // @include *://libreddit.some-things.org*
  21. // @include *://reddit.stuehieyr.com*
  22. // @include *://lr.mint.lgbt*
  23. // @include *://libreddit.igna.rocks*
  24. // @include *://libreddit.autarkic.org*
  25. // @include *://libreddit.flux.industries*
  26. // @include *://libreddit.drivet.xyz*
  27. // @include *://lr.oversold.host*
  28. // @include *://libreddit.de*
  29. // @include *://libreddit.pussthecat.org*
  30. // @include *://libreddit.mutahar.rocks*
  31. // @include *://libreddit.northboot.xyz*
  32. // @include *://leddit.xyz*
  33. // @include *://de.leddit.xyz*
  34. // @include *://lr.cowfee.moe*
  35. // @include *://libreddit.hu*
  36. // @include *://libreddit.totaldarkness.net*
  37. // @include *://libreddit.esmailelbob.xyz*
  38. // @include *://lr.vern.cc*
  39. // @include *://libreddit.nl*
  40. // @include *://lr.stilic.ml*
  41. // @include *://reddi.tk*
  42. // @include *://libreddit.bus-hit.me*
  43. // @include *://libreddit.datatunnel.xyz*
  44. // @include *://libreddit.crewz.me*
  45. // @include *://r.walkx.org*
  46. // @include *://libreddit.kylrth.com*
  47. // @include *://libreddit.yonalee.eu*
  48. // @include *://libreddit.winscloud.net*
  49. // @include *://libreddit.tiekoetter.com*
  50. // @include *://reddit.rtrace.io*
  51. // @include *://libreddit.lunar.icu*
  52. // @include *://libreddit.privacydev.net*
  53. // @include *://libreddit.notyourcomputer.net*
  54. // @include *://r.ahwx.org*
  55. // @include *://bob.fr.to*
  56. // @include *://reddit.beparanoid.de*
  57. // @include *://libreddit.dcs0.hu*
  58. // @icon data:image/png;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHwAfHx8AHx8fAB8fHwAfHx8CHx8fKh8fH20fHx+tHx8f2h8fH/MfHx/9Hx8f/R8fH/MfHx/aHx8frR8fH20fHx8qHx8fAh8fHwAfHx8AHx8fAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHx8AHx8fAB8fHwAfHx8BHx8fNx8fH5gfHx/gHx8f/B8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/B8fH+AfHx+YHx8fNx8fHwEfHx8AHx8fAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fAB8fHwAfHx8AHx8fGR8fH4ofHx/rHx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/rHx8fih8fHxkfHx8AHx8fAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHwAfHx8AHx8fAB8fHzUfHx/DHx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8fwx8fHzUfHx8AHx8fAB8fHwAAAAAAAAAAAAAAAAAfHx8AHx8fAB8fHwAfHx9BHx8f2h8fH/8fHx//Hx8f/x4eHv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8eHh7/Hx8f/x8fH/8fHx//Hx8f2h8fH0EfHx8AHx8fAB8fHwAAAAAAHx8fAB8fHwAfHx8AHx8fNR8fH9ofHx//Hx8f/x8fH/8hISH/NjY2/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zY2Nv8hISH/Hx8f/x8fH/8fHx//Hx8f2h8fHzUfHx8AHx8fAB8fHwAfHx8AHx8fAB8fHxkfHx/DHx8f/x8fH/8fHx//Hh4e/zExMf/FxcX/5ubm/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/m5ub/xcXF/zExMf8eHh7/Hx8f/x8fH/8fHx//Hx8fwx8fHxkfHx8AHx8fAB8fHwAfHx8BHx8fih8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/97e3v/////////////////////////////////////////////////////////////////e3t7/MzMz/x4eHv8fHx//Hx8f/x8fH/8fHx//Hx8fih8fHwEfHx8AHx8fAB8fHzcfHx/rHx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////////////////////////////////////////////////////9zc3P8zMzP/Hh4e/x8fH/8fHx//Hx8f/x8fH/8fHx/rHx8fNx8fHwAfHx8CHx8fmB8fH/8fHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//c3Nz/////////////////////////////////////////////////////////////////3Nzc/zMzM/8eHh7/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx+YHx8fAh8fHyofHx/gHx8f/x8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/9zc3P////////////////+zs7P/dHR0/3R0d/90dHf/dHR3/3R0d/91dXb/dnZ2/3d3d/9paWn/Jycn/x4eHv8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH98fHx8qHx8fbR8fH/wfHx//Hx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////4CAgP8cHBf/OjoX/z4+Fv8+Phb/Pj4W/ykpGf8aGhv/Gxsb/xwcHP8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/B8fH20fHx+tHx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//c3Nz/////////////////gYGD/zQ0GP/S0gb/7e0D/+vrA//r6wP/b28U/xsbH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8frR8fH9ofHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/9zc3P////////////////+BgYP/NjYY/+XlBP///wD///8A////AP93dxP/Gxsg/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/aHx8f8x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////4GBg/82Nhj/5OQE////AP///wD///8A/3Z2E/8bGyD/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/MfHx/9Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//c3Nz/////////////////gYGD/zY2GP/k5AT///8A////AP///wD/dnYT/xsbIP8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/R8fH/0fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/9zc3P////////////////+BgYP/NjYY/+TkBP///wD///8A////AP92dhP/Gxsg/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/9Hx8f8x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////4GBg/82Nhj/5OQE////AP///wD///8A/3Z2E/8bGyD/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/MfHx/aHx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//c3Nz/////////////////gYGD/zY2GP/k5AT///8A////AP///wD/dnYT/xsbIP8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f2h8fH60fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/9zc3P////////////////+BgYP/NjYY/+TkBP///wD///8A////AP92dhP/Gxsg/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx+tHx8fbR8fH/wfHx//Hx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////4GBg/82Nhj/5OQE////AP///wD///8A/3R0E/8XFyD/Gxsg/xwcH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/B8fH20fHx8qHx8f4B8fH/8fHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//c3Nz/////////////////gYGD/zY2GP/k5AT///8A////AP///wD/pKQN/2hoFf9raxT/X18W/yYmHv8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/gHx8fKh8fHwIfHx+YHx8f/x8fH/8fHx//Hx8f/x8fH/8eHh7/MzMz/9zc3P////////////////+BgYP/NjYY/+TkBP///wD///8A////AP/+/gD//f0A////AP/b2wX/MzMc/x4eH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH5gfHx8CHx8fAB8fHzcfHx/rHx8f/x8fH/8fHx//Hx8f/x4eHv8zMzP/3Nzc/////////////////4GBg/82Nhj/5OQE////AP///wD///8A////AP///wD///8A/9zcBf8zMxz/Hh4f/x8fH/8fHx//Hx8f/x8fH/8fHx/rHx8fNx8fHwAfHx8AHx8fAR8fH4ofHx//Hx8f/x8fH/8fHx//Hh4e/zMzM//d3d3/////////////////gYGD/zY2GP/l5QT///8A////AP///wD///8A////AP///wD/3d0F/zMzHP8eHh//Hx8f/x8fH/8fHx//Hx8f/x8fH4oeHh4BHx8fAB8fHwAfHx8AHx8fGR8fH8MfHx//Hx8f/x8fH/8eHh7/MTEx/8vLy//t7e3/6+vr/+3t7f94eHr/NDQY/9LSBv/t7QP/6+sD/+vrA//r6wP/6+sD/+3tAv/Lywf/MTEc/x4eH/8fHx//Hx8f/x8fH/8fHx/DHx8fGR8fHwAfHx8AHx8fAB8fHwAfHx8AHx8fNR8fH9ofHx//Hx8f/x8fH/8iIiL/PT09/0JCQv9CQkL/QkJC/y4uL/8jIx7/Pj4b/0JCGv9CQhr/QkIa/0JCGv9CQhr/QkIa/z09G/8iIh//Hx8f/x8fH/8fHx//Hx8f2h8fHzUfHx8AHx8fAB8fHwAAAAAAHx8fAB8fHwAfHx8AHx8fQR8fH9ofHx//Hx8f/x8fH/8dHR3/HR0d/x0dHf8dHR3/Hh4e/x8fH/8dHR//HR0f/x0dH/8dHR//HR0f/x0dH/8dHR//HR0f/x8fH/8fHx//Hx8f/x8fH9ofHx9BHx8fAB8fHwAfHx8AAAAAAAAAAAAAAAAAHx8fAB8fHwAfHx8AHx8fNR8fH8MfHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/DHx8fNR8fHwAfHx8AHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fAB8fHwAfHx8AHx8fGR8fH4ofHx/rHx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/rHx8fih8fHxkfHx8AHx8fAB8fHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fAB8fHwAfHx8AHh4eAR8fHzcfHx+YHx8f4B8fH/wfHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/wfHx/fHx8fmB8fHzcfHx8BHx8fAB8fHwAfHx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fAB8fHwAfHx8AHx8fAB8fHwIfHx8qHx8fbR8fH60fHx/aHx8f8x8fH/0fHx/9Hx8f8x8fH9ofHx+tHx8fbR8fHyofHx8CHx8fAB8fHwAfHx8AHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AB//4AAH/8AAA/+AAAH/AAAA/gAAAHwAAAA4AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf8=
  59. // @grant none
  60. // @run-at document-end
  61. // @license GPL-3.0-or-later
  62. // @namespace -
  63. // ==/UserScript==
  64.  
  65. let style = document.createElement('style')
  66. style.textContent = `
  67. .user-popup::before {
  68. content: '';
  69. width: 10px;
  70. height: 10px;
  71. display: block;
  72. position: absolute;
  73. top: -6px;
  74. left: 44%;
  75. border-right: 1px solid var(--highlighted);
  76. border-top: 1px solid var(--highlighted);
  77. rotate: -45deg;
  78. background: var(--post);
  79. }
  80.  
  81. .user-popup {
  82. position: absolute;
  83. width: 100px;
  84. background-color: var(--post);
  85. z-index: 1;
  86. border: var(--panel-border);
  87. border-radius: 5px;
  88. text-align: center;
  89. word-break: break-word;
  90. place-content: center;
  91. display: grid;
  92. animation: .1s 0s 1 normal userPopup both running linear;
  93. }
  94.  
  95. .user-popup-img {
  96. width: 80px;
  97. margin-top: 10px;
  98. border-radius: 5px;
  99. background: var(--foreground);
  100. border: var(--panel-border);
  101. }
  102.  
  103. .user-popup-karma {
  104. color: var(--accent);
  105. }
  106.  
  107. .d-none {
  108. display: none;
  109. }
  110.  
  111. @keyframes userPopup {
  112. 0% {
  113. opacity: 0;
  114. transform: translateY(10px);
  115. }
  116. }`
  117. document.head.appendChild(style)
  118.  
  119. document.querySelectorAll('[class*="author"][href*="/user/"], [class*="author"][href*="/u/"]').forEach(e => {
  120. e.dataset.parsed = '0'
  121. e.addEventListener('mouseenter', () => {
  122. if(e.dataset.parsed === '0') {
  123. e.dataset.parsed = '1'
  124. fetch(e.href).then(r => r.text()).then(c => {
  125. let doc = new DOMParser().parseFromString(c, 'text/html'),
  126. avatar = doc.querySelector('#user_icon').src,
  127. name = doc.querySelector('#user_name').textContent.slice(2),
  128. karma = +doc.querySelector('#user_details > :nth-child(3)').textContent,
  129. created = doc.querySelector('#user_details > :nth-child(4)').textContent,
  130. popup = document.createElement('div'),
  131. popupImg = document.createElement('img'),
  132. popupName = document.createElement('span'),
  133. popupKarma = document.createElement('span')
  134. y = e.offsetTop,
  135. x = e.offsetLeft
  136.  
  137. popup.style.top = y+25+'px'
  138. popup.style.left = x+'px'
  139. popup.className = 'user-popup'
  140. popupImg.className = 'user-popup-img'
  141. popupImg.src = avatar
  142. popupImg.alt = name
  143. if(name.length > 9) popupImg.style.margin = (name.length/2)+'px auto'
  144. popupName.textContent = name
  145. popupKarma.textContent = karma
  146. popupKarma.className = 'user-popup-karma'
  147. popup.appendChild(popupImg)
  148. popup.appendChild(popupName)
  149. popup.appendChild(popupKarma)
  150. e.insertAdjacentElement('afterend', popup)
  151. })
  152. } else {
  153. let pop = e.nextElementSibling,
  154. pop2 = pop.nextElementSibling,
  155. y = e.offsetTop,
  156. x = e.offsetLeft
  157.  
  158. if(pop2.className.indexOf('user-popup') != -1) pop2.remove()
  159.  
  160. pop.style.top = y+25+'px'
  161. pop.style.left = x+'px'
  162. pop.classList.remove('d-none')
  163. }
  164. })
  165. e.addEventListener('mouseleave', () => {
  166. e.nextElementSibling.classList.add('d-none')
  167. })
  168. })