Show The Average Score For Animes/Mangas Instead Of N/A

Use this script to see the average score of unpopular animes/mangas that have unweighted scores "N/A" on MAL.

As of 19.11.2021. See ბოლო ვერსია.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Show The Average Score For Animes/Mangas Instead Of N/A
// @namespace    AverageScore
// @version      0.11
// @description  Use this script to see the average score of unpopular animes/mangas that have unweighted scores "N/A" on MAL.
// @author       hacker09
// @include      /^https:\/\/myanimelist\.net\/((anime|manga)(id=)?(\.php\?id=)?)(\/)?([\d]+)?/
// @icon         https://www.google.com/s2/favicons?domain=myanimelist.net
// @run-at       document-end
// @grant        none
// ==/UserScript==
(function() {
  'use strict';
  if (document.querySelector("div.score-label.score-na") !== null) { //If the N/A score exists

    async function GetStats() //Creates a function to get the stats
    { //Starts the function
      var url = document.querySelector("a[href*='stats']").href; //Get the stats page url
      const response = await fetch(url); //Fetch the stats page
      const html = await response.text(); //Gets the fetch response
      const newDocument = new DOMParser().parseFromString(html, 'text/html'); //Parses the fetch response

      const votes = [...newDocument.querySelectorAll(".score-stats td")].map(row => row.textContent)
      const scoreDictionary = {}
      for (let i = 1; i < votes.length; i += 2) {
        const vote = votes[i];
        const score = votes[i - 1];
        scoreDictionary[score] = vote;
      }

      for (let i in scoreDictionary)
        scoreDictionary[i] = Number(scoreDictionary[i].match(/.*\((\d+) votes?\)/)[1]);
      const totalVotes = Object.values(scoreDictionary).reduce((acc, val) => acc + val);
      let average = 0;

      for (let i in scoreDictionary)
        average += scoreDictionary[i] * i;
      var result = average /= totalVotes;

      document.querySelector("div.score-label.score-na").innerText = result.toFixed(2); //Show the Average Score results
      document.querySelectorAll("div.fl-l.score")[0].dataset.user = totalVotes + ' users'; //Show the total users that voted
    } //Finishes the async function

    var TimesExecuted = 0; //Creates a new variable

    window.onmousemove = async function() { //Creates a new function to run when the mouse is hovering the page
      TimesExecuted += 1; //Sum the amount of times that the mouse hovered the page
      if (TimesExecuted === 1) { //On the first time that the page is hovered
        GetStats(); //Starts the function GetStats
      } // //Finishes the if condition
    }; //Finishes the onmousemove event listener

  } //Finishes the if statement
})();