Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save xamantra/e3dd9b11909a0375103af150d9bbe0e5 to your computer and use it in GitHub Desktop.
Save xamantra/e3dd9b11909a0375103af150d9bbe0e5 to your computer and use it in GitHub Desktop.
A script extending MyAnimeList.net for displaying average duration per episode and average number of episodes per entry.
// ==UserScript==
// @name [MyAnimeList] Average-Duration&Average-Episode
// @namespace http://tampermonkey.net/
// @version 1.2
// @description A script for extending MyAnimeList.net for displaying average duration per episode and average number of episodes per entry.
// @author xamantra
// @updateURL https://gist.githubusercontent.com/xamantra/e3dd9b11909a0375103af150d9bbe0e5/raw/dd0a389d1f0d2b84576688045dfdbe71a2a7684c/%255BMyAnimeList%255D%2520Average-Duration&Average-Episode.js
// @downloadURL https://gist.githubusercontent.com/xamantra/e3dd9b11909a0375103af150d9bbe0e5/raw/dd0a389d1f0d2b84576688045dfdbe71a2a7684c/%255BMyAnimeList%255D%2520Average-Duration&Average-Episode.js
// @supportURL https://gist.github.com/xamantra/e3dd9b11909a0375103af150d9bbe0e5
// @match https://myanimelist.net/profile/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
var js = "var inserted = false;\r\n\r\nfunction appendMinsPerEpisode() {\r\n var daysRaw = $(`div.stats.anime > div.stat-score.di-t.w100.pt8 > div.di-tc.al.pl8.fs12.fw-b`).text();\r\n var episodesRaw = $(`div.stats.anime > div.mt12.ml8.mr8.clearfix > ul.stats-data.fl-r > li:nth-child(3) > span.di-ib.fl-r`).text();\r\n var totalRaw = $(`div.stats.anime > div.mt12.ml8.mr8.clearfix > ul.stats-data.fl-r > li:nth-child(1) > span.di-ib.fl-r`).text();\r\n var ptwRaw = $(`div.stats.anime > div.mt12.ml8.mr8.clearfix > ul.stats-status.fl-l > li:nth-child(5) > span`).text();\r\n if (daysRaw === null || daysRaw === undefined) {\r\n return;\r\n }\r\n if (episodesRaw === null || episodesRaw === undefined) {\r\n return;\r\n }\r\n var days = Number(daysRaw.replace(`Days: `, ``).split(`,`).join(``));\r\n var episodes = Number(episodesRaw.split(`,`).join(``));\r\n var total = Number(totalRaw.split(`,`).join(``));\r\n var ptw = Number(ptwRaw.split(`,`).join(``));\r\n var avgEpisodes = Math.round(episodes \/ (total - ptw));\r\n console.log({ days, avgEpisodes });\r\n var avg = Math.round((days \/ episodes) * 1440);\r\n var element = `<div class=\"stat-score di-t w100 pt8\">\r\n <div class=\"di-tc al pl8 fs12 fw-b\"><span class=\"fn-grey2 fw-n\">Minutes\/ep: <\/span>${avg}<\/div>\r\n <div class=\"di-tc ar pr8 fs12 fw-b\">\r\n <span class=\"fn-grey2 fw-n\">Episodes\/entry:<\/span>\r\n <span class=\"score-label score-0\">${avgEpisodes}<\/span>\r\n <\/div>\r\n <\/div>`\r\n $(element).insertBefore(`#statistics > div:nth-child(2) > div.stats.anime > div.stats-graph.mt8`);\r\n inserted = true;\r\n}\r\n\r\nasync function sleep(timeout = 1000) {\r\n return new Promise((resolve, _) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, timeout);\r\n });\r\n}\r\n\r\nasync function run() {\r\n while (!inserted) {\r\n await sleep(1000);\r\n console.log(\'Inserting avg. mins per episode element...\');\r\n appendMinsPerEpisode();\r\n }\r\n}\r\n\r\nrun();";
var scriptTag = document.createElement("script");
scriptTag.innerHTML = js;
document.head.appendChild(scriptTag);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment