Automatically Add Start/Finish Dates For Animes/Mangas + Helpful Buttons

Select Watching/Reading to auto add the start date, select Completed to auto add the finish date. The script shows the actual Anime/Manga dates below the Anime/Manga image, that's updated every time you reload or click on Watching/Reading/Completed. Hover the mouse on the dates and click to reset them. This script adds 6 helpful buttons on the Anime/Manga Edit Details Page.

目前為 2021-06-13 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Automatically Add Start/Finish Dates For Animes/Mangas + Helpful Buttons
// @namespace    Add End And Start Dates In 1 Click + Reset Dates/All Buttons,
// @version      2.0.0.15
// @description  Select Watching/Reading to auto add the start date, select Completed to auto add the finish date. The script shows the actual Anime/Manga dates below the Anime/Manga image, that's updated every time you reload or click on Watching/Reading/Completed. Hover the mouse on the dates and click to reset them. This script adds 6 helpful buttons on the Anime/Manga Edit Details Page.
// @author       hacker09
// @match        https://myanimelist.net/ownlist/*
// @include      /^https:\/\/myanimelist\.net\/(anime|manga)\/[\d]+(\/.*)?/
// @icon         https://www.google.com/s2/favicons?domain=myanimelist.net
// @run-at       document-end
// @grant        none
// ==/UserScript==
//document.querySelector("iframe").contentDocument.querySelector("#add_anime_finish_date_month").value = '1'
(function() {
  'use strict';
  if (window.location.pathname.split('/')[1] === 'ownlist') //Check If The User Is On https://myanimelist.net/ownlist/  ,And If Yes These Codes Will Run
  {
    var entrytype = window.location.pathname.split('/')[2]; //Get the entry type
    var $ = window.jQuery; //Defines That The Symbol $ Is A jQuery
    //**********************************************************************************************************************************************************************
    var ResetBTNStart = document.createElement("a"); //Creates an a element
    ResetBTNStart.innerHTML = "Reset"; //Adds the text to the element
    document.querySelector("#start_date_insert_today").parentElement.appendChild(ResetBTNStart); //Shows the button
    ResetBTNStart.setAttribute("id", "resetstart"); //Adds an id to the button
    ResetBTNStart.setAttribute("style", "cursor: pointer;margin-left: 5px;height: 10px;width: 10px;top: 10px;"); //Sets the button css style
    document.getElementById('resetstart').onclick = function() { //Adds an advent listener to the button
      document.getElementById("add_" + entrytype + "_start_date_year").selectedIndex = -1; //Reset the start year
      document.getElementById("add_" + entrytype + "_start_date_day").selectedIndex = -1; //Reset the start day
      document.getElementById("add_" + entrytype + "_start_date_month").selectedIndex = -1; //Reset the start month
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    var ResetBTNEnd = document.createElement("a"); //Creates an a element
    ResetBTNEnd.innerHTML = "Reset"; //Adds the text to the element
    document.querySelector("#end_date_insert_today").parentElement.appendChild(ResetBTNEnd); //Shows the button
    ResetBTNEnd.setAttribute("id", "resetend"); //Adds an id to the button
    ResetBTNEnd.setAttribute("style", "cursor: pointer;margin-left: 5px;height: 10px;width: 10px;top: 10px;"); //Sets the button css style
    document.getElementById('resetend').onclick = function() { //Adds an advent listener to the button
      document.getElementById("add_" + entrytype + "_finish_date_year").selectedIndex = -1; //Reset the finish year
      document.getElementById("add_" + entrytype + "_finish_date_day").selectedIndex = -1; //Reset the finish day
      document.getElementById("add_" + entrytype + "_finish_date_month").selectedIndex = -1; //Reset the finish month
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    var AddDates = document.createElement("a"); //Creates an a element
    AddDates.innerHTML = "Add End And Start Dates + Submit"; //Adds the text to the element
    document.querySelector('.notice_open_public').appendChild(AddDates); //Shows the button
    AddDates.setAttribute("id", "addalldates"); //Adds an id to the button
    AddDates.setAttribute("style", "cursor: pointer;margin-left: 5px;height: 10px;width: 10px;top: 10px;"); //Sets the button css style
    document.getElementById('addalldates').onclick = function() { //Adds an advent listener to the button
      document.getElementById("start_date_insert_today").click(); //Adds the start date
      document.getElementById("end_date_insert_today").click(); //Adds the finish date
      document.getElementsByClassName("inputButton main_submit")[0].click(); //Submit
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    var InsertStart = document.createElement("a"); //Creates an a element
    InsertStart.innerHTML = "Insert + Submit"; //Adds the text to the element

    function findTheInStartDateTd() { //Find the td element that thas the test "Start Date"
      const headers = [...document.querySelectorAll("td")]; //Select all the td elements
      return headers.find(td => td.textContent === "Start Date"); //Find the td element that has the text "Start Date"
    } //Finishes the findTheInStartDateTd function
    findTheInStartDateTd().nextElementSibling.setAttribute("style", "padding: 14px;"); //Sets the td element css style
    findTheInStartDateTd().parentElement.appendChild(InsertStart); //Shows the button
    InsertStart.setAttribute("id", "InsertStart"); //Adds an id to the button
    InsertStart.setAttribute("style", "cursor: pointer;margin-left: -200px;"); //Sets the button css style
    document.getElementById('InsertStart').onclick = function() { //Adds an advent listener to the button
      document.getElementById("start_date_insert_today").click(); //Adds the start date
      document.getElementsByClassName("inputButton main_submit")[0].click(); //Submit
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    var InsertEnd = document.createElement("a"); //Creates an a element
    InsertEnd.innerHTML = "Insert + Submit"; //Adds the text to the element

    function findTheInFinishDateTd() { //Find the td element that thas the test "Finish Date"
      const headers = [...document.querySelectorAll("td")]; //Select all the td elements
      return headers.find(td => td.textContent === "Finish Date"); //Find the td element that has the text "Finish Date"
    } //Finishes the findTheInFinishDateTd function
    findTheInFinishDateTd().nextElementSibling.setAttribute("style", "padding: 14px;"); //Sets the td element css style
    findTheInFinishDateTd().parentElement.appendChild(InsertEnd); //Shows the button
    InsertEnd.setAttribute("id", "InsertEnd"); //Adds an id to the button
    InsertEnd.setAttribute("style", "cursor: pointer;margin-left: -200px;"); //Sets the button css style
    document.getElementById('InsertEnd').onclick = function() { //Adds an advent listener to the button
      document.getElementById("end_date_insert_today").click(); //Adds the finish date
      document.getElementsByClassName("inputButton main_submit")[0].click(); //Submit
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    var ResetAlmostAll = document.createElement("a"); //Creates an a element
    ResetAlmostAll.innerHTML = "Reset Almost Everything"; //Adds the text to the element
    document.querySelector("#advanced-button").parentElement.appendChild(ResetAlmostAll); //Shows the button
    ResetAlmostAll.setAttribute("id", "resetalmostall"); //Adds an id to the button
    ResetAlmostAll.setAttribute("style", "cursor: pointer;margin-left: 240px;"); //Sets the button css style
    document.getElementById('resetalmostall').onclick = function resetSelectElement() { //Adds an advent listener to the button
      $('select').prop('selectedIndex', 0); //Resets almost all form fields
      document.getElementById("unknown_end").click(); //Unmark the box "unknown_end"
    }; //Finishes the advent listener
    //**********************************************************************************************************************************************************************
    setTimeout(function() { //Starts the timeout condition
      if (document.querySelectorAll("#hide-advanced-button")[0].outerText !== "Hide Advanced ") //Detect if the Show Advanced button is already opened or not,if not then...
      { //Starts the if condition
        document.querySelector("#hide-advanced-button").click(); //Clicks on the Show Advanced button
      } //Finishes the if condition
    }, 0); //Finishes the settimeout
  } //Finishes the if condition
  //**********************************************************************************************************************************************************************
  else //If the user is on a manga/anime page
  { //Starts the if condition
    var d = new Date(); //Creates a variable called d that will hold the computer date on the local time zone
    var day = d.getDate(); //Creates a variable to hold the actual day
    var month = d.getMonth() + 1; //Creates a variable to hold the actual month
    var year = d.getFullYear(); //Creates a variable to hold the actual year
    var entrytype2 = window.location.pathname.split('/')[1]; //Creates a variable to hold the actual entry type
    var token = document.head.querySelector("[name='csrf_token']").content; //Creates a variable to hold the actual csrf_token
    var entryid = location.pathname.match(/\d+/)[0]; //Creates a variable to hold the actual entry id
    var priority, is_asked_to_discuss, sns_post_type, start_month, start_day, start_year, finish_month, finish_day, finish_year, watched_eps, current_score, anime_tags, storage_type, storage_value, rewatched_times, rewatch_value, comments, manga_read_chapters, manga_retail, manga_read_times, manga_reread_value, manga_read_volumes, status, IsEditPageOpened, totaleps, totalVols, totalChaps, AddedToList; //Make all these variables global

    async function ShowButtons() //Creates a function to show the Buttons
    { //Starts the function
      //Starts the codes to Display the Started Date
      if ((start_month !== "") || (start_day !== "") || (start_year !== "")) // If month or date or year is set in the started dates then show the button
      { //Starts the if condition
        var ResetStartDate = document.createElement("div"); //Creates the button to reset the start date
        ResetStartDate.innerHTML = 'Started: Month:' + start_month + ' Day:' + start_day + ' Year:' + start_year; //Define the button text
        document.querySelector("#profileRows").append(ResetStartDate); //Append the button below the "add to favorites" button
        ResetStartDate.setAttribute("id", "ResetStartDate"); //Gives an id to the button
        if (document.querySelectorAll("#ResetStartDate").length > 1) //If the button already exits
        { //Starts the if condition
          document.querySelector("#ResetStartDate").remove(); //Remove the old button
        } //Finishes the if condition
        ResetStartDate.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the page loads
        document.querySelector("#ResetStartDate").onmousemove = function() { //Set the css for the button when the mouse is hovering the button
          ResetStartDate.innerHTML = "Reset Started Date"; //Change the element text
          ResetStartDate.setAttribute("style", "cursor: pointer;background-color: #1d439b;border-color: #6386d5;border-style: solid;border-width: 0 0 1px;color: #fff;padding: 2px 3px;"); //Make the element look like it's clickable and change the element color
        }; //Finishes the css for the button when the mouse is hovering the button
        document.querySelector("#ResetStartDate").onmouseout = function() {
          ResetStartDate.innerHTML = 'Started: Month:' + start_month + ' Day:' + start_day + ' Year:' + start_year;
          ResetStartDate.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the mouse is not hovering the button
        }; //Set the css for the button when the mouse is leaves the button
        document.querySelector("#ResetStartDate").addEventListener("click", ResetStartDateFunc, false); //When the button is cliked call this function
      } //Finishes the if condition

      //Starts the codes to Display the Finished Date
      if ((finish_month !== "") || (finish_day !== "") || (finish_year !== "")) // If month or date or year is set in the finished dates then show the button
      { //Starts the if condition
        var ResetFinishDate = document.createElement("div"); //Creates the button to reset the finish date
        ResetFinishDate.innerHTML = 'Finished: Month:' + finish_month + ' Day:' + finish_day + ' Year:' + finish_year; //Define the button text; //Define the button text
        document.querySelector("#profileRows").append(ResetFinishDate); //Append the button below the "add to favorites" button
        ResetFinishDate.setAttribute("id", "ResetFinishDate"); //Gives an id to the button
        if (document.querySelectorAll("#ResetFinishDate").length > 1) //If the button already exits
        { //Starts the if condition
          document.querySelector("#ResetFinishDate").remove(); //Remove the old button
        } //Finishes the if condition
        ResetFinishDate.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the page loads
        document.querySelector("#ResetFinishDate").onmousemove = function() { //Set the css for the button when the mouse is hovering the button
          ResetFinishDate.innerHTML = "Reset Finished Date"; //Change the element text
          ResetFinishDate.setAttribute("style", "cursor: pointer;background-color: #1d439b;border-color: #6386d5;border-style: solid;border-width: 0 0 1px;color: #fff;padding: 2px 3px;"); //Make the element look like it's clickable and change the element color
        }; //Finishes the css for the button when the mouse is hovering the button
        document.querySelector("#ResetFinishDate").onmouseout = function() {
          ResetFinishDate.innerHTML = 'Finished: Month:' + finish_month + ' Day:' + finish_day + ' Year:' + finish_year;
          ResetFinishDate.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the mouse is leaves the button
        }; //Set the css for the button when the mouse is hovering the button
        document.querySelector("#ResetFinishDate").addEventListener("click", ResetFinishDateFunc, false); //When the button is cliked call this function
      } //Finishes the if condition

      //Starts the codes to Display the Reset All Dates
      if ((finish_month !== "" || finish_day !== "" || finish_year !== "") && (start_month !== "" || start_day !== "" || start_year !== "")) // If month or date or year is set in the started and finished dates then show the button
      { //Starts the if condition
        var ResetAllDatesVar = document.createElement("div"); //Creates the button to reset all dates
        ResetAllDatesVar.innerHTML = "Reset Started+Finished Dates"; //Define the button text
        document.querySelector("#profileRows").append(ResetAllDatesVar); //Append the button below the "add to favorites" button
        ResetAllDatesVar.setAttribute("id", "ResetAllDatesVar"); //Gives an id to the button
        if (document.querySelectorAll("#ResetAllDatesVar").length > 1) //If the button already exits
        { //Starts the if condition
          document.querySelectorAll("#ResetAllDatesVar")[0].remove(); //Remove the old button.There's no real need to update this button again, but if isn't updated the onmousemove/out won't work
        } //Finishes the if condition
        ResetAllDatesVar.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the page loads
        document.querySelector("#ResetAllDatesVar").onmousemove = function() { //Set the css for the button when the mouse is hovering the button
          ResetAllDatesVar.setAttribute("style", "cursor: pointer;background-color: #1d439b;border-color: #6386d5;border-style: solid;border-width: 0 0 1px;color: #fff;padding: 2px 3px;"); //Make the element look like it's clickable and change the element color
        }; //Finishes the css for the button when the mouse is hovering the button
        document.querySelector("#ResetAllDatesVar").onmouseout = function() { //Set the css for the button when the mouse isn't hovering the button
          ResetAllDatesVar.setAttribute("style", "border-top: #92b0f1 1px solid;border-color: #92b0f1;border-style: solid;border-width: 0 0 1px;color: #1d439b;cursor: pointer;padding: 2px 3px;"); //Set the css for the button when the mouse is leaves the button
        }; //Fnishrd the css for the button when the mouse isn't hovering the button
        document.querySelector("#ResetAllDatesVar").addEventListener("click", ResetAllDates, false); //When the button is cliked call this function
      } //Finishes the if condition
    } //Finishes the async ShowButtons function

    async function getVariables() //Creates a function to get the needed Variables
    { //Starts the function
      const response = await fetch('https://myanimelist.net/ownlist/' + entrytype2 + '/' + entryid + '/edit'); //Fetch
      const html = await response.text(); //Gets the fetch response
      const newDocument = new DOMParser().parseFromString(html, 'text/html'); //Parses the fetch response
      priority = newDocument.querySelector("#add_" + entrytype2 + "_priority").value; //Creates a variable to hold the actual priority value
      is_asked_to_discuss = newDocument.querySelector("#add_" + entrytype2 + "_is_asked_to_discuss").value; //Creates a variable to hold the actual is_asked_to_discuss value
      sns_post_type = newDocument.querySelector("#add_" + entrytype2 + "_sns_post_type").value; //Creates a variable to hold the actual SNS value
      start_day = newDocument.querySelector("#add_" + entrytype2 + "_start_date_day").value; //Creates a variable to hold the actual start_day value
      start_month = newDocument.querySelector("#add_" + entrytype2 + "_start_date_month").value; //Creates a variable to hold the actual start_month value
      start_year = newDocument.querySelector("#add_" + entrytype2 + "_start_date_year").value; //Creates a variable to hold the actual start_year value
      finish_day = newDocument.querySelector("#add_" + entrytype2 + "_finish_date_day").value; //Creates a variable to hold the actual finish_day value
      finish_month = newDocument.querySelector("#add_" + entrytype2 + "_finish_date_month").value; //Creates a variable to hold the actual finish_month value
      finish_year = newDocument.querySelector("#add_" + entrytype2 + "_finish_date_year").value; //Creates a variable to hold the actual finish_year value
      current_score = newDocument.querySelector("#add_" + entrytype2 + "_score").value; //Creates a variable to hold the actual current_score value
      anime_tags = newDocument.querySelector("#add_" + entrytype2 + "_tags").value; //Creates a variable to hold the actual anime_tags value
      storage_type = newDocument.querySelector("#add_" + entrytype2 + "_storage_type").value; //Creates a variable to hold the actual storage_type value
      comments = newDocument.querySelector("#add_" + entrytype2 + "_comments").value; //Creates a variable to hold the actual comments value
      status = newDocument.querySelector("#add_" + entrytype2 + "_status").value; //Creates a variable to hold the actual status value
      if (entrytype2 === 'anime') //If the entry type is anime
      { //Starts the if condition
        watched_eps = newDocument.querySelector("#add_anime_num_watched_episodes").value; //Creates a variable to hold the actual watched_eps value
        storage_value = newDocument.querySelector("#add_anime_storage_value").value; //Creates a variable to hold the actual storage_value value
        rewatched_times = newDocument.querySelector("#add_anime_num_watched_times").value; //Creates a variable to hold the actual rewatched_times value
        rewatch_value = newDocument.querySelector("#add_anime_rewatch_value").value; //Creates a variable to hold the actual rewatch_value value

        totaleps = document.querySelector("#curEps").textContent; //Get the actual total episodes value

      } //Finishes the if condition
      else //If the entry type is manga
      { //Starts the else condition
        manga_read_chapters = newDocument.querySelector("#add_manga_num_read_chapters").value; //Creates a variable to hold the actual manga_read_chapters value
        manga_retail = newDocument.querySelector("#add_manga_num_retail_volumes").value; //Creates a variable to hold the actual manga_retail value
        manga_read_times = newDocument.querySelector("#add_manga_num_read_times").value; //Creates a variable to hold the actual manga_read_times value
        manga_reread_value = newDocument.querySelector("#add_manga_reread_value").value; //Creates a variable to hold the actual manga_read_times value
        manga_read_volumes = newDocument.querySelector("#add_manga_num_read_volumes").value; //Creates a variable to hold the actual manga_read_volumes value

        totalVols = document.querySelector("#totalVols").textContent; //Get the actual total manga volumes
        totalChaps = document.querySelector("#totalChaps").textContent; //Get the actual total manga chapters

      } //Finishes the else condition
    } //Finishes the async getvariables function
    if (document.querySelector("#myinfo_status.btn-user-status-add-list.js-form-user-status.js-form-user-status-btn.myinfo_addtolist") === null) { //If the anime is on the user list
      AddedToList = true;
      var TimesExecuted = 0; //Creates a new variable
      var increaseby = 1; //Creates a new variable

      window.onmousemove = async function() { //Creates a new function to run when the mouse is hovering the page
        TimesExecuted += increaseby; //Sum the amount of times that the page was mouse hovered the page
        if (TimesExecuted === 1) { //On the first time that the page is hovered
          await getVariables(); //Call and wait the function getVariables
          await ShowButtons(); //Call and wait the function ShowButtons to Display the buttons
        } // //Finishes the if condition
      }; //Finishes the onmousemove advent listener

    } //Finishes the if condition

    const loadingScreen = document.createElement("div"); //Creates a div element
    loadingScreen.setAttribute("id", "loadingScreen"); //Adds an id to the element
    loadingScreen.setAttribute("style", "display: none;z-index: 200;position: fixed;width: 100%;height: 100%;background-color: #00000054;top: 0;background-image: url(https://pa1.narvii.com/6258/61f5cd5c652efec508ff3c6e10798d26ccef6366_hq.gif);background-repeat: no-repeat;background-position: center;"); //Set the element css and img
    document.body.appendChild(loadingScreen); //Add the loading screen to the html body

    async function ResetAllDates() //Creates a function to Reset All Dates
    { //Starts the async ResetAllDates function
      document.querySelector("#loadingScreen").style.display = ''; //Shows the Loading Screen
      document.querySelector("#ResetAllDatesVar").textContent = 'Done!'; //Changes the button text
      if (IsEditPageOpened === true) //Check if the button edit details was opened
      { //Starts the if condition
        await getVariables(); //Call and wait the function getVariables
      } //Finishes the if condition
      document.querySelector("#ResetStartDate").textContent = 'Done!'; //Changes the button text
      document.querySelector("#ResetFinishDate").textContent = 'Done!'; //Changes the button text
      document.querySelector("#ResetAllDatesVar").remove(); //Removes the now needless button
      document.querySelector("#ResetStartDate").remove(); //Removes the now needless button
      document.querySelector("#ResetFinishDate").remove(); //Removes the now needless button
      const response = await fetch("https://myanimelist.net/ownlist/" + entrytype2 + "/" + entryid + "/edit", {
        "headers": {
          "content-type": "application/x-www-form-urlencoded"
        },
        "body": "add_manga%5Bnum_read_chapters%5D=" + manga_read_chapters + "&add_manga%5Bnum_retail_volumes%5D=" + manga_retail + "&add_manga%5Bnum_read_times%5D=" + manga_read_times + "&add_manga%5Breread_value%5D=" + manga_reread_value + "&add_manga%5Bnum_read_volumes%5D=" + manga_read_volumes + "&add_" + entrytype2 + "%5Bstatus%5D=" + status + "&add_anime%5Bnum_watched_episodes%5D=" + watched_eps + "&add_" + entrytype2 + "%5Bscore%5D=" + current_score + "&add_" + entrytype2 + "%5Btags%5D=" + anime_tags + "&add_" + entrytype2 + "%5Bpriority%5D=" + priority + "&add_" + entrytype2 + "%5Bstorage_type%5D=" + storage_type + "&add_anime%5Bstorage_value%5D=" + storage_value + "&add_anime%5Bnum_watched_times%5D=" + rewatched_times + "&add_anime%5Brewatch_value%5D=" + rewatch_value + "&add_" + entrytype2 + "%5Bcomments%5D=" + comments + "&add_" + entrytype2 + "%5Bis_asked_to_discuss%5D=" + is_asked_to_discuss + "&add_" + entrytype2 + "%5Bsns_post_type%5D=" + sns_post_type + "&csrf_token=" + token + "",
        "method": "POST"
      }); //Finishes the fetch
      await getVariables(); //Call and wait the function getVariables to get the new removed Finished/Started Dates variables,if the process was successful
      document.querySelector("#loadingScreen").style.display = 'none'; //Hides the Loading Screen
    } //Finishes the async ResetAllDates function

    async function ResetStartDateFunc() //Creates a function to reset the start dates
    { //Starts the async ResetStartDateFunc function
      document.querySelector("#loadingScreen").style.display = ''; //Shows the Loading Screen
      document.querySelector("#ResetStartDate").textContent = 'Done!'; //Changes the button text
      if (document.querySelector("#ResetAllDatesVar") !== null) //Check if the button ResetAllDatesVar exists
      { //Starts the if condition
        document.querySelectorAll("#ResetAllDatesVar")[0].textContent = 'Done!'; //Changes the button text
      } //Finishes the if condition
      if (IsEditPageOpened === true) //Check if the button edit details was opened
      { //Starts the if condition
        await getVariables(); //Call and wait the function getVariables
      } //Finishes the if condition
      document.querySelector("#ResetStartDate").remove(); //Removes the now needless button
      if (document.querySelector("#ResetAllDatesVar") !== null) //Check if the button ResetAllDatesVar exists
      { //Starts the if condition
        document.querySelector("#ResetAllDatesVar").remove(); //Removes the now needless button
      } //Finishes the if condition
      const response = await fetch("https://myanimelist.net/ownlist/" + entrytype2 + "/" + entryid + "/edit", {
        "headers": {
          "content-type": "application/x-www-form-urlencoded"
        },
        "body": "add_manga%5Bnum_read_chapters%5D=" + manga_read_chapters + "&add_manga%5Bnum_retail_volumes%5D=" + manga_retail + "&add_manga%5Bnum_read_times%5D=" + manga_read_times + "&add_manga%5Breread_value%5D=" + manga_reread_value + "&add_manga%5Bnum_read_volumes%5D=" + manga_read_volumes + "&add_" + entrytype2 + "%5Bstatus%5D=" + status + "&add_anime%5Bnum_watched_episodes%5D=" + watched_eps + "&add_" + entrytype2 + "%5Bscore%5D=" + current_score + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bmonth%5D=" + finish_month + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bday%5D=" + finish_day + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Byear%5D=" + finish_year + "&add_" + entrytype2 + "%5Btags%5D=" + anime_tags + "&add_" + entrytype2 + "%5Bpriority%5D=" + priority + "&add_" + entrytype2 + "%5Bstorage_type%5D=" + storage_type + "&add_anime%5Bstorage_value%5D=" + storage_value + "&add_anime%5Bnum_watched_times%5D=" + rewatched_times + "&add_anime%5Brewatch_value%5D=" + rewatch_value + "&add_" + entrytype2 + "%5Bcomments%5D=" + comments + "&add_" + entrytype2 + "%5Bis_asked_to_discuss%5D=" + is_asked_to_discuss + "&add_" + entrytype2 + "%5Bsns_post_type%5D=" + sns_post_type + "&csrf_token=" + token + "",
        "method": "POST"
      }); //Finishes the fetch
      await getVariables(); //Call and wait the function getVariables to get the new removed Started Dates variables,if the process was successful
      await ShowButtons(); //Call and wait the function ShowButtons to Display the buttons
      document.querySelector("#loadingScreen").style.display = 'none'; //Hides the Loading Screen
    } //Finishes the async ResetStartDateFunc function

    async function ResetFinishDateFunc() //Creates a function to reset the finish dates
    { //Starts the async ResetFinishDateFunc function
      document.querySelector("#loadingScreen").style.display = ''; //Shows the Loading Screen
      document.querySelector("#ResetFinishDate").textContent = 'Done!'; //Changes the button text
      if (document.querySelector("#ResetAllDatesVar") !== null) //Check if the button ResetAllDatesVar exists
      { //Starts the if condition
        document.querySelectorAll("#ResetAllDatesVar")[0].textContent = 'Done!'; //Changes the button text
      } //Finishes the if condition
      if (IsEditPageOpened === true) //Check if the button edit details was opened
      { //Starts the if condition
        await getVariables(); //Call and wait the function getVariables
      } //Finishes the if condition
      document.querySelector("#ResetFinishDate").remove(); //Removes the now needless button
      if (document.querySelector("#ResetAllDatesVar") !== null) //Check if the button ResetAllDatesVar exists
      { //Starts the if condition
        document.querySelector("#ResetAllDatesVar").remove(); //Removes the now needless button
      } //Finishes the if condition
      const response = await fetch("https://myanimelist.net/ownlist/" + entrytype2 + "/" + entryid + "/edit", {
        "headers": {
          "content-type": "application/x-www-form-urlencoded"
        },
        "body": "add_manga%5Bnum_read_chapters%5D=" + manga_read_chapters + "&add_manga%5Bnum_retail_volumes%5D=" + manga_retail + "&add_manga%5Bnum_read_times%5D=" + manga_read_times + "&add_manga%5Breread_value%5D=" + manga_reread_value + "&add_manga%5Bnum_read_volumes%5D=" + manga_read_volumes + "&add_" + entrytype2 + "%5Bstatus%5D=" + status + "&add_anime%5Bnum_watched_episodes%5D=" + watched_eps + "&add_" + entrytype2 + "%5Bscore%5D=" + current_score + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bmonth%5D=" + start_month + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bday%5D=" + start_day + "&add_" + entrytype2 + "%5Bstart_date%5D%5Byear%5D=" + start_year + "&add_" + entrytype2 + "%5Btags%5D=" + anime_tags + "&add_" + entrytype2 + "%5Bpriority%5D=" + priority + "&add_" + entrytype2 + "%5Bstorage_type%5D=" + storage_type + "&add_anime%5Bstorage_value%5D=" + storage_value + "&add_anime%5Bnum_watched_times%5D=" + rewatched_times + "&add_anime%5Brewatch_value%5D=" + rewatch_value + "&add_" + entrytype2 + "%5Bcomments%5D=" + comments + "&add_" + entrytype2 + "%5Bis_asked_to_discuss%5D=" + is_asked_to_discuss + "&add_" + entrytype2 + "%5Bsns_post_type%5D=" + sns_post_type + "&csrf_token=" + token + "",
        "method": "POST"
      }); //Finishes the fetch
      await getVariables(); //Call and wait the function getVariables to get the new removed Finished Dates variables,if the process was successful
      await ShowButtons(); //Call and wait the function ShowButtons to Display the buttons
      document.querySelector("#loadingScreen").style.display = 'none'; //Hides the Loading Screen
    } //Finishes the async ResetFinishDateFunc function

    async function AddStartDate() //Add The Start Date When Watching Is Selected
    { //Starts the async function
      document.querySelector("#loadingScreen").style.display = ''; //Shows the Loading Screen
      if (IsEditPageOpened === true) //Check if the button edit details was opened
      { //Starts the if condition
        await getVariables(); //Call and wait the function getVariables
      } //Finishes the if condition
      if ((start_month === "") && (start_day === "") && (start_year === "")) // If month and date and year is NOT set in the started dates then Add The Start Date
      { //Starts the if condition
        const response = await fetch("https://myanimelist.net/ownlist/" + entrytype2 + "/" + entryid + "/edit", {
          "headers": {
            "content-type": "application/x-www-form-urlencoded"
          },
          "body": "add_manga%5Bnum_read_chapters%5D=" + manga_read_chapters + "&add_manga%5Bnum_retail_volumes%5D=" + manga_retail + "&add_manga%5Bnum_read_times%5D=" + manga_read_times + "&add_manga%5Breread_value%5D=" + manga_reread_value + "&add_manga%5Bnum_read_volumes%5D=" + manga_read_volumes + "&add_" + entrytype2 + "%5Bstatus%5D=1&add_anime%5Bnum_watched_episodes%5D=" + watched_eps + "&add_" + entrytype2 + "%5Bscore%5D=" + current_score + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bmonth%5D=" + month + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bday%5D=" + day + "&add_" + entrytype2 + "%5Bstart_date%5D%5Byear%5D=" + year + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bmonth%5D=" + finish_month + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bday%5D=" + finish_day + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Byear%5D=" + finish_year + "&add_" + entrytype2 + "%5Btags%5D=" + anime_tags + "&add_" + entrytype2 + "%5Bpriority%5D=" + priority + "&add_" + entrytype2 + "%5Bstorage_type%5D=" + storage_type + "&add_anime%5Bstorage_value%5D=" + storage_value + "&add_anime%5Bnum_watched_times%5D=" + rewatched_times + "&add_anime%5Brewatch_value%5D=" + rewatch_value + "&add_" + entrytype2 + "%5Bcomments%5D=" + comments + "&add_" + entrytype2 + "%5Bis_asked_to_discuss%5D=" + is_asked_to_discuss + "&add_" + entrytype2 + "%5Bsns_post_type%5D=" + sns_post_type + "&csrf_token=" + token + "",
          "method": "POST",
        }); //Set The Anime Start Dates
        await getVariables(); //Call and wait the function getVariables to get the new removed Started Dates variables,if the process was successful
        await ShowButtons(); //Call and wait the function ShowButtons to Display the Finished Date and Display the Reset All Dates
      } //Finishes the if condition
      document.querySelector("#loadingScreen").style.display = 'none'; //Hides the Loading Screen
    } //Finishes the async AddStartDate function

    async function AddFinishDate() //Add The Finished Date When Completed Is Selected
    { //Starts the async AddFinishDate function
      document.querySelector("#loadingScreen").style.display = ''; //Shows the Loading Screen
      if (IsEditPageOpened === true) //Check if the button edit details was opened
      { //Starts the if condition
        await getVariables(); //Call and wait the function getVariables
      } //Finishes the if condition
      if (finish_month === "" && finish_day === "" && finish_year === "") // If month and date and year is NOT set in the finished dates then Add The Finished Date
      { //Starts the if condition

        if ((start_month === "") && (start_day === "") && (start_year === "")) //If month, date and year isn't set in the started dates, add the start date as well
        { //Starts the if condition
          start_day = day; //Instead of adding a blank or the actual start day value, add today's day
          start_month = month; //Instead of adding a blank or the actual start month value, add today's month
          start_year = year; //Instead of adding a blank or the actual start year value, add today's year
        } //Finishes the if condition

        const response = await fetch("https://myanimelist.net/ownlist/" + entrytype2 + "/" + entryid + "/edit", {
          "headers": {
            "content-type": "application/x-www-form-urlencoded"
          },
          "body": "add_manga%5Bnum_read_chapters%5D=" + totalChaps + "&add_manga%5Bnum_retail_volumes%5D=" + manga_retail + "&add_manga%5Bnum_read_times%5D=" + manga_read_times + "&add_manga%5Breread_value%5D=" + manga_reread_value + "&add_manga%5Bnum_read_volumes%5D=" + totalVols + "&add_" + entrytype2 + "%5Bstatus%5D=2&add_anime%5Bnum_watched_episodes%5D=" + totaleps + "&add_" + entrytype2 + "%5Bscore%5D=" + current_score + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bmonth%5D=" + start_month + "&add_" + entrytype2 + "%5Bstart_date%5D%5Bday%5D=" + start_day + "&add_" + entrytype2 + "%5Bstart_date%5D%5Byear%5D=" + start_year + "&add_" + entrytype2 + "%5Btags%5D=" + anime_tags + "&add_" + entrytype2 + "%5Bpriority%5D=" + priority + "&add_" + entrytype2 + "%5Bstorage_type%5D=" + storage_type + "&add_anime%5Bstorage_value%5D=" + storage_value + "&add_anime%5Bnum_watched_times%5D=" + rewatched_times + "&add_anime%5Brewatch_value%5D=" + rewatch_value + "&add_" + entrytype2 + "%5Bcomments%5D=" + comments + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bmonth%5D=" + month + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Bday%5D=" + day + "&add_" + entrytype2 + "%5Bfinish_date%5D%5Byear%5D=" + year + "&add_" + entrytype2 + "%5Bis_asked_to_discuss%5D=" + is_asked_to_discuss + "&add_" + entrytype2 + "%5Bsns_post_type%5D=" + sns_post_type + "&csrf_token=" + token + "",
          "method": "POST"
        }); //Finishes the fetch
        await getVariables(); //Call and wait the function getVariables to get the new removed Finished Dates variables,if the process was successful
        await ShowButtons(); //Call and wait the function ShowButtons to Display the Finished Date and Display the Reset All Dates
      } //Finishes the if condition
      document.querySelector("#loadingScreen").style.display = 'none'; //Hides the Loading Screen
    } //Finishes the async AddFinishDate function

    function SelectedValue() //Creates a function to get the selected value
    { //Starts the SelectedValue function
      if (this.value === '2') //Completed Was Selected
      { //Starts the if condition
        setTimeout(function() {
          AddFinishDate();
        }, 200); //Starts the function AddFinishDate
      } //Finishes the Completed else function
      else if (this.value === '1') //Watching Was Selected
      { //Starts the if condition
        setTimeout(function() {
          AddStartDate();
        }, 200); //Starts the function AddStartDate
      } //Finishes the Watching if function
      else if (this.value === '3') //On-Hold Was Selected
      { //Starts the else condition
        console.log('On-Hold Was Selected'); //Just shows a message on the dev console, this allows MAL to run their actual advent listener
      } //Finishes the On-Hold else function
      else if (this.value === '4') //Dropped Was Selected
      { //Starts the else condition
        console.log('Dropped Was Selected'); //Just shows a message on the dev console, this allows MAL to run their actual advent listener
      } //Finishes the Dropped else function
      else //Plan To Watch Was Selected
      { //Starts the else condition
        console.log('Plan To Watch Was Selected'); //Just shows a message on the dev console, this allows MAL to run their actual advent listener
      } //Finishes the Plan To else function
    } //Finishes the SelectedValue function

    document.querySelectorAll("#myinfo_status")[1].addEventListener('change', SelectedValue, false); //Adds an advent listener to the status button on the right side of the anime image
    document.querySelectorAll("#myinfo_status")[0].addEventListener('change', SelectedValue, false); //Adds an advent listener to the status button below the anime image

    if (entrytype2 === 'anime') //If the script is running on an anime entry
    { //Starts the if condition
      function PlusButtonAddDates() //Adding all episodes auto set entry as completed and auto set finished dates
      { //Starts the function PlusButtonAddDates
        if (document.querySelector("#myinfo_watchedeps").value === document.querySelector("#curEps").textContent) //If the number of added eps is the same as the total then
        { //Starts the if condition
          document.querySelectorAll("#myinfo_status")[1].value = '2'; //Set the anime as completed, in a way that the user can see
          document.querySelectorAll("#myinfo_status")[0].value = '2'; //Set the anime as completed, in a way that the user can see
          document.querySelectorAll("#myinfo_status")[1].dataset.class = 'completed'; //Change the selection box to blue
          AddFinishDate(); //Call the function AddFinishDate
        } //Finishes the if condition
        if (document.querySelector("#myinfo_watchedeps").value === '1' && document.querySelector("#curEps").textContent > '1') //If the number of added eps is = 1 and if the entry has more than 1 eps then
        { //Starts the if condition
          document.querySelectorAll("#myinfo_status")[1].value = '1'; //Set the anime as watching, in a way that the user can see
          document.querySelectorAll("#myinfo_status")[0].value = '1'; //Set the anime as watching, in a way that the user can see
          document.querySelectorAll("#myinfo_status")[1].dataset.class = 'watching'; //Change the selection box to blue
          AddStartDate(); //Call the function AddFinishDate
        } //Finishes the if condition
      } //Finishes the function PlusButtonAddDates

      function CallPlusButtonAddDates() //Function to call the function PlusButtonAddDates after some time
      { //Starts the function CallPlusButtonAddDates
        setTimeout(PlusButtonAddDates, 750); //Call the function PlusButtonAddDates, after 0.7 secs
      } //Finishes the function CallPlusButtonAddDates

      document.querySelectorAll("i.fa.fa-plus-circle")[0].addEventListener('click', CallPlusButtonAddDates, false); //Adds an advent listener to the plus button below the anime image
      if (AddedToList === true) //If the entry is already on the user list
      { //Starts the if condition
        document.querySelectorAll("i.fa.fa-plus-circle")[1].addEventListener('click', CallPlusButtonAddDates, false); //Adds an advent listener to the plus button on the right side of the anime image
      } //Finishes the if condition

      document.querySelectorAll("#myinfo_watchedeps")[1].addEventListener('change', function() { //Starts the function
        watched_eps = this.value; //Update the variable value
      }, false); //Adds an advent listener to the watched eps button on the right side of the anime image

    } //Finishes the if condition
    else //If the entry type is manga
    { //Starts the else condition
      document.querySelectorAll("#myinfo_volumes")[1].addEventListener('change', function() { //Starts the function
        manga_read_volumes = this.value; //Update the variable value
      }, false); //Adds an advent listener to the manga read volumes button on the right side of the anime image
      document.querySelectorAll("#myinfo_chapters")[1].addEventListener('change', function() { //Starts the function
        manga_read_chapters = this.value; //Update the variable value
      }, false); //Adds an advent listener to the manga read chapters button on the right side of the anime image
    } //Finishes the else condition

    document.querySelectorAll("#myinfo_score")[1].addEventListener('change', function() { //Starts the function
      current_score = this.value; //Update the variable value
    }, false); //Adds an advent listener to the score button on the right side of the anime image

    if (AddedToList === true) //If the manga is already added to the the user list
    { //Starts the if condition
      document.querySelector("input.inputButton.btn-middle.flat.js-anime-update-button,input.inputButton.js-manga-update-button").nextElementSibling.onclick = function() { //Adds an advent listener to the button
        IsEditPageOpened = true; //Set the variable to true
      }; //Finishes the advent listener

      document.querySelector("input.inputButton.btn-middle.flat.js-anime-update-button,input.inputButton.js-manga-update-button").nextElementSibling.oncontextmenu = function() { //Adds an advent listener to the button
        IsEditPageOpened = true; //Set the variable to true
      }; //Finishes the advent listener
    } //Finishes the if condition

  } //Finishes the else condition
})();