// ==UserScript== // @name Scratch Extension by YGN (@ygnills) // @namespace http://tampermonkey.net/ // @version 1.0 // @description When you hover your mouse over any of your Scratch projects, it displays a card with information about that project and its owner. // @author YGN // @match https://scratch.mit.edu/* // @icon https://www.google.com/s2/favicons?sz=64&domain=scratch.mit.edu // @grant none // @license MIT // @downloadURL none // ==/UserScript== let f=(x)=>{return document.querySelector(x)} let fa=(x)=>{return document.querySelectorAll(x)} function formatNumber(number) { if (number >= 1000) { const units = ['k', 'M', 'B', 'T']; const unitIndex = Math.floor(Math.log10(number) / 3); const formattedNumber = (number / Math.pow(1000, unitIndex)).toFixed(1); return formattedNumber + units[unitIndex - 1]; } else { return number.toString(); } } function truncateText(text,range) { if (text.length > range) { return text.slice(0, range) + "..."; } else { return text; } } function createPopup(mainElement){ if(!isNaN(parseInt(mainElement.getAttribute("href").split("/")[2]))){ f(".ygnpopup").style.display="block" f(".ygnprojectthumb").src="https://uploads.scratch.mit.edu/projects/thumbnails/"+mainElement.getAttribute("href").split("/")[2]+".png" fetch("https://api.scratch.mit.edu/projects/"+mainElement.getAttribute("href").split("/")[2]).then(data=>data.json()).then(data=>{ f(".ygnuserlogo").src="https://uploads.scratch.mit.edu/users/avatars/"+data.author.id+".png" f(".ygnprojectname").innerText=truncateText(data.title,28) f(".ygnusername").innerText=truncateText(data.author.username,12) f(".ygnloves").innerText=formatNumber(data.stats.loves) f(".ygnfavs").innerText=formatNumber(data.stats.favorites) f(".ygnremixes").innerText=data.stats.remixes f(".ygnviews").innerText=formatNumber(data.stats.views) fetch("https://scratch.mit.edu/users/"+data.author.username+"/followers/").then(x=>x.text()).then(x=>{ f(".ygnfcount").innerText=" ("+x.split("»")[1].split("(")[1].split(")")[0]+" Followers)" //console.log(x) }) }) } } window.addEventListener("load",()=>{ let popupHTML=document.createElement("DIV") popupHTML.setAttribute("class","ygnpopup") document.body.appendChild(popupHTML) f(".ygnpopup").innerHTML=`