Greasy Fork is available in English.

Finish Airing Date - MAL

Calculate the expected finished airing date for anime entries and automatically open the anime entry link once it finishes airing.

بۇ قوليازمىنى قاچىلاش؟
ئاپتورنىڭ تەۋسىيەلىگەن قوليازمىسى

سىز بەلكىم Quotes Filter - MAL نى ياقتۇرۇشىڭىز مۇمكىن.

بۇ قوليازمىنى قاچىلاش
// ==UserScript==
// @name         Finish Airing Date - MAL
// @namespace    https://greasyfork.org/en/users/670188-hacker09?sort=daily_installs
// @version      3
// @description  Calculate the expected finished airing date for anime entries and automatically open the anime entry link once it finishes airing.
// @author       hacker09
// @match        https://myanimelist.net/anime/*
// @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        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_openInTab
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function() {
  'use strict';
  var expectedFinishedAiringDate;
  const startDateElement = [...[...document.querySelectorAll("h2")].find(h2 => h2.textContent === "Information").parentNode.querySelectorAll("div")].find(info => info.innerText.includes("Aired")).querySelector("span"); //Get the start date from the page
  if (startDateElement.parentNode.textContent.match(/\?/) !== null && document.querySelector("#curEps").innerText !== '?') { //If the finished date is unknown and the total entry eps are known
    const startDateMatch = startDateElement.parentNode.textContent.match(/(\w{3})\s((\d{1,2}),\s)?(\d{4})/); //Save the start date
    const month = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}[startDateMatch[1]]; //Convert start month to number
    const startDate = new Date(parseInt(startDateMatch[4]), month - 1, startDateMatch[2] === undefined ? 0 : parseInt(startDateMatch[2])); //Save start date Year, month, day
    expectedFinishedAiringDate = new Date(startDate.getTime() + parseInt(document.querySelector("#curEps").innerText) * 7 * 24 * 60 * 60 * 1000); //Calculate the expected finished date

    startDateElement.parentNode.className += ' dark_text'; //Make the text bold
    startDateElement.nextSibling.textContent = startDateElement.nextSibling.textContent.replace(/\?/g, ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][expectedFinishedAiringDate.getMonth()] + ' ' + (startDateMatch[2] === undefined ? '' : expectedFinishedAiringDate.getDate() + ', ') + expectedFinishedAiringDate.getFullYear()); //Replace ? with the finished and formatted date

    if (document.body.innerText.search("Add to List") === -1) { //If the entry is on the user list
      GM_setValue(location.href.split('/')[4], expectedFinishedAiringDate.getTime()); //Store the Entry id and the expectedFinishedAiringDate
      startDateElement.nextSibling.textContent += 'ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ﹌﹌﹌﹌﹌﹌'; //Add an underline to the expected finish date if the user will have the anime link opened on that day

      GM_listValues().forEach(function(el) { //For each stored value on tampermonkey
        if (GM_getValue(el) <= Date.now()) //If the expectedFinishedAiringDate is today or has passed
        { //Starts the if condition
          GM_openInTab(`https://myanimelist.net/anime/${el.match(/\d+/)[0]}/`); //Open the link on a new tab
          GM_deleteValue(el); //Remove the opened link from the storage
        } //Finishes the if condition
      }); //Finishes the forEach loop
    } //Finishes the if condition
  } //Finishes the if condition
})();