Greasy Fork is available in English.

Shortened large numbers within main menu

automatically shorten large leaderboard scores and total score + score to next rank to compact forms like/similar to '1.8B' or '700k' for easier reading. Ideal for optimizing/making viewing better.

  1. // ==UserScript==
  2. // @name Shortened large numbers within main menu
  3. // @namespace lore
  4. // @version 1
  5. // @license MIT
  6. // @description automatically shorten large leaderboard scores and total score + score to next rank to compact forms like/similar to '1.8B' or '700k' for easier reading. Ideal for optimizing/making viewing better.
  7. // @author lore
  8. // @match *://*sploop.io/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. function shortenNumber(number) {
  16. if (number >= 1000 && number < 1000000) {
  17. return (number / 1000).toFixed(1).replace(/\.0$/, '') + 'k';
  18. } else if (number >= 1000000 && number < 1000000000) {
  19. return (number / 1000000).toFixed(1).replace(/\.0$/, '') + 'M';
  20. } else if (number >= 1000000000) {
  21. return (number / 1000000000).toFixed(1).replace(/\.0$/, '') + 'B';
  22. } else {
  23. return number;
  24. }
  25. }
  26.  
  27. function updateScores() {
  28. updateLeaderboard('ranking-ranks-container');
  29. updateLeaderboard('ranking-rank-container');
  30. updateLeaderboard('ranks-container');
  31.  
  32. updateSingleScore('total-score');
  33. updateSingleScore('score-left-value');
  34. }
  35.  
  36. function updateLeaderboard(containerId) {
  37. const scores = document.querySelectorAll(`#${containerId} .ranking-score`);
  38. scores.forEach(updateScoreElement);
  39. }
  40.  
  41. function updateSingleScore(elementId) {
  42. const scoreElement = document.getElementById(elementId);
  43. if (scoreElement) {
  44. updateScoreElement(scoreElement);
  45. }
  46. }
  47.  
  48. function updateScoreElement(scoreElement) {
  49. const scoreText = scoreElement.textContent.trim();
  50. if (!scoreElement.dataset.shortened && !isNaN(scoreText)) {
  51. const score = parseInt(scoreText, 10);
  52. if (score >= 1000) {
  53. scoreElement.textContent = shortenNumber(score);
  54. scoreElement.dataset.shortened = true;
  55. }
  56. }
  57. }
  58.  
  59. function isElementVisible(el) {
  60. const rect = el.getBoundingClientRect();
  61. return rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight);
  62. }
  63.  
  64. setInterval(() => {
  65. if (isElementVisible(document.body)) {
  66. updateScores();
  67. }
  68. }, 30);
  69. })();
  70.