🏠 Home 

Anime/Manga Favorited Status %

See the % of people that have watched and favorited an anime/manga in the entry status page.


Install this script?
Author's suggested script

You may also like Approved Entries Notifier - MAL.


Install this script
// ==UserScript==
// @name         Anime/Manga Favorited Status %
// @namespace    FavoriteStatus%
// @version      18
// @description  See the % of people that have watched and favorited an anime/manga in the entry status page.
// @author       hacker09
// @include      /^https:\/\/myanimelist\.net\/(anime|manga)\/[\d]+(\/.*)?/
// @match        https://myanimelist.net/anime/*/*/stats
// @icon         https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://myanimelist.net&size=64
// @run-at       document-end
// @grant        none
// ==/UserScript==
setTimeout((async function() {
'use strict';
if (document.body.innerText.match('Status: Not yet aired') === null) //If the opened entry is airing or has finished airing
{ //Starts the if condition
const response1 = await (await fetch('https://api.jikan.moe/v4/' + location.href.split('/')[3] + '/' + location.href.match(/\d+/)[0] + '/statistics')).json(); //Get Stats
var TotalUsers = response1.data.total; //Save the TotalUsers to variable
var PTWR = response1.data.plan_to_watch; //Save the PTW to variable
if (location.href.split('/')[3] === 'manga') //If the opened entry is manga
{ //Starts the if condition
PTWR = response1.data.plan_to_read; //Save the PTR to variable
} //Finishes the if condition
var Information = [...[...document.querySelectorAll("h2")].find(h2 => h2.textContent === "Information").parentNode.querySelectorAll("div")]; //Save the Information stats to variable
var Favorites = parseFloat(Information.find(info => info.innerText.includes('Favorites: ')).innerText.match(/(\d+,)?(\d+,)?\d+/)[0].replaceAll(',', '')); //Save the Favs to variable
Information.find(info => info.innerText.includes("Favorites:")).innerText = 'Favorites: ' + Favorites.toLocaleString() + ' (' + ((Favorites) / ((TotalUsers) - (PTWR))).toLocaleString("en", { //Do the math and show the r###lt
style: 'percent', //Show the r###lt as %
minimumFractionDigits: 2 //Show the % with 2 decimals
}) + ')'; //Show the total number after the Favorites: number
Information.find(info => info.innerText.includes("Favorites:")).title = `( ${Favorites} )/(( ${TotalUsers} ) - ( ${PTWR} ))`; //Show the math on mouse hover
if (location.href.match(/^https:\/\/myanimelist\.net\/(anime|manga)\/[\d]+\/.*\/stats/) !== null) //If the user is on the stats page
{ //Starts the if condition
var SummaryStats = [...[...document.querySelectorAll("h2")].find(h2 => h2.textContent === "Summary Stats").parentNode.querySelectorAll("span")]; //Save the summary stats to variable
SummaryStats.find(info => info.innerText.includes("Total:")).innerText = Information.find(info => info.innerText.includes("Favorites:")).innerText + '\nTotal: '
SummaryStats.find(info => info.innerText.includes("Total:")).title = `( ${Favorites} )/(( ${TotalUsers} ) - ( ${PTWR} ))`; //Show the math on mouse hover
} //Finishes the if condition
if (document.querySelector("div.detail-characters-list.clearfix") !== null) //If the user is on the main entry page
{ //Starts the if condition
document.querySelector("div.detail-characters-list.clearfix").querySelectorAll('div.spaceit_pad').forEach(function(el, index) { //For each character on the page
setTimeout(async function() { //Starts the setimeout function
const json = await (await fetch('https://api.jikan.moe/v4/characters/' + el.parentNode.querySelector('a').href.match(/\d+/)[0])).json(); //Get Stats
el.innerText += '\nFavorited: ' + ((json.data.favorites) / ((TotalUsers) - (PTWR))).toLocaleString("en", { //Do the math and show the r###lt
style: 'percent', //Show the r###lt as %
minimumFractionDigits: 2 //Show the % with 2 decimals
}); //Add a break line and show the % below the text
el.title += `( ${json.data.favorites} )/(( ${TotalUsers} ) - ( ${PTWR} ))`; //Show the math on mouse hover
}, index * 1200); //Finishes the setimeout function
}); //Finishes the for each condition
} //Finishes the if condition
} //Finishes the if condition
})(), 1000);