Total Duration Time + Total Episodes Of Any Animes Franchises

This is a tool to easily and quickly see how long it will take for you to finish watching the whole anime Franchise, and you can also see how many episodes the Franchise has.

Versão de: 25/10/2020. Veja: a última versão.

// ==UserScript==
// @name         Total Duration Time + Total Episodes Of Any Animes Franchises
// @namespace    DurationByFranchise
// @version      0.4
// @description  This is a tool to easily and quickly see how long it will take for you to finish watching the whole anime Franchise, and you can also see how many episodes the Franchise has.
// @author       hacker09
// @match        https://myanimelist.net/anime/*
// @match        https://myanimelist.net/anime.php?id=*
// @match        https://chiaki.site/?/tools/watch_order/id/*
// @match        https://chiaki.site/?/tools/watch_order/group_id/*
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
var TotalHrMins = []; //Creates a new blank array
var TotalEpsResult = []; //Creates a new blank array
if (top.location.host === 'myanimelist.net') {
    var animeid = location.pathname.match(/\d+/)[0]; //Detect the anime id
}

async function ProcessRawTextContent() //Creates a function to Process the RawTextContent
{ //Starts the function
    if (top.location.host === 'myanimelist.net') //If The User Is On The https://myanimelist.net/ Website Fetch Chiaki
    { //Starts the if condition
        var IsUserOnMAL = true;
        const response = await fetch('https://cors-anywhere.herokuapp.com/https://chiaki.site/?/tools/watch_order/id/'+animeid); //Fetch
        const html = await response.text(); //Gets the fetch response
        const newDocument = new DOMParser().parseFromString(html, 'text/html'); //Parses the fetch response
        var TextElement = newDocument.querySelectorAll("span.uk-text-muted.uk-text-small"); //Creates a variable to loop though the elements after
    } //Finishes the if condition
    else //If The User Is On The https://chiaki.site/ Website Start Processing The Content
    { //Starts the else condition
        var IsUserOnMAL = false;
        var TextElement = document.querySelectorAll("span.uk-text-muted.uk-text-small"); //Creates a variable to loop though the elements after
    } //Finishes the else condition

    for (var i = 0; i < TextElement.length; i++) { //Starts the for condition
        var TotalRawDuration = TextElement[i].textContent.split("× ")[1].split(' |')[0].match(/\d+|\?/g); //Creates a variable to hold the total unprocessed times
        var TotalEpisodes = TextElement[i].textContent.split("× ")[0].split(' |')[2].match(/\d+|\?/g); //Creates a variable to hold the total episodes
        TotalEpsResult.push(TotalEpisodes); //Add The Eps To The Array
        if (TotalRawDuration.length !== 1) //If has Hrs and Mins
        { //Starts the if condition
            var ExtractHrs = TotalRawDuration[0] * 60; //Extract Hrs And Convert To Mins
            var TotalHrs = TotalEpisodes * ExtractHrs; //Multiply Eps By Hrs
            var TotalMins = TotalEpisodes * TotalRawDuration[1]; //Multiply Extracted Eps By Mins
            TotalHrMins.push(TotalHrs, TotalMins); //Add Hrs And Mins To The Array
        } //Finishes the if condition
        else //Extract only Mins
        { //Starts the else condition
            var TotalMins = TotalEpisodes * TotalRawDuration[0]; //Multiply Extracted Eps By Mins
            TotalHrMins.push(TotalMins); //Add Mins To The Array
        } //Finishes the else condition
    } //Finishes the for condition

    var TotalEpsFinal = TotalEpsResult.filter(Boolean).map(i => Number(i)).reduce((a, b) => a + b); //Sum The Total Eps
    var TotalMinsResult = TotalHrMins.filter(Boolean).map(i => Number(i)).reduce((a, b) => a + b); //Sum Hrs in Mins + Total Mins
    //The Commands Below Converts The Total Franchise Time To Precise Hours And Minutes
    var days = Math.floor(TotalMinsResult / 1440);
    var hours = Math.floor((TotalMinsResult % 1440) / 60);
    var minutes = (TotalMinsResult % 1440) % 60;

    if (IsUserOnMAL) //If The User Is On The https://myanimelist.net/ Website
    {
      function findTheInformationheader() {
       const headers = [...document.querySelectorAll("h2")]; //Select all h2 elements on MAL
       return headers.find(h2 => h2.textContent === "Information");
     } //Find the h2 element that has the text Information

       function findTheRatingText() {
        const allInfo = [...findTheInformationheader().parentNode.querySelectorAll("div")]; //Select all divs inside the Information h2 element
        return allInfo.find(info => info.innerText.includes("Rating"));
       } //Find the Rating text that's inside the information h2 element
      findTheRatingText().insertAdjacentHTML('beforeend', '<div class="spaceit"><span class="dark_text">Total Franchise Duration: </span>' + days + ' day(s) ' + hours + ' hr(s) ' + minutes + ' min(s)</div>'); //Show The Total Duration
      findTheRatingText().insertAdjacentHTML('beforeend', '<div class="spaceit"><span class="dark_text">Total Franchise Episodes: '+TotalEpsFinal+'</a></li></div>'); //Show The Total Episodes
    }
    else //If The User Is On The https://chiaki.site/ Website
     {
      document.querySelector("ul.uk-flex-center.noborder.uk-tab").insertAdjacentHTML('beforeend', '<li><a href="#">Total Duration: ' + days + ' day(s) ' + hours + ' hr(s) ' + minutes + ' min(s)</a></li>'); //Show The Total Duration
    document.querySelector("ul.uk-flex-center.noborder.uk-tab").insertAdjacentHTML('beforeend', '<li><a href="#">Total Episodes: '+TotalEpsFinal+'</a></li>'); //Show The Total Episodes
     }
} //Finishes the async function
ProcessRawTextContent(); //Starts the function
})();