🏠 Home 

MyAnimeList(MAL) - Random Anime/Manga/People & Characters (Rx filter)

Search for a random anime, manga, person or character

// ==UserScript==
// @name         MyAnimeList(MAL) - Random Anime/Manga/People & Characters (Rx filter)
// @version      1.3.12
// @description  Search for a random anime, manga, person or character
// @author       Cpt_mathix
// @match        *://myanimelist.net/*
// @exclude      *://myanimelist.net/animelist*
// @exclude      *://myanimelist.net/mangalist*
// @license      GPL-2.0+; http://www.gnu.org/licenses/gpl-2.0.txt
// @grant        none
// @noframes
// @namespace https://greasyfork.org/users/16080
// ==/UserScript==
(function() {
'use strict';
var cancelling = false;
initScript();
initSearchPopup();
injectCSS();
function initScript() {
if (document.location.href.indexOf('hideLayout') == -1) {
if (!document.getElementById('randAnime')) {
anime();
}
if (!document.getElementById('randManga')) {
manga();
}
if (!document.getElementById('randPerson')) {
person();
}
if (!document.getElementById('randCharacter')) {
character();
}
}
if (getInfoFromUrl(document.location.href, "random") === "true") {
var header_right = document.getElementsByClassName("header-right")[0];
header_right.insertAdjacentHTML("afterbegin", '<a href="javascript:void(0);" id="new_random" class="js-anime-edit-info-button">New Random</a> - ');
header_right.addEventListener("click", function() {
initSearching();
var type = getInfoFromUrl(document.location.href, "randomType");
switch(type) {
case "anime":
getRandomAnime();
break;
case "manga":
getRandomManga();
break;
case "people":
getRandomPeople();
break;
case "character":
getRandomCharacter();
break;
default:
alert("Something went wrong, sorry for the inconvenience");
break;
}
});
}
}
function getInfoFromUrl(url, info) {
if (url.indexOf('?') === -1) {
return null;
}
var urlVariables = url.split('?')[1].split('&'),
varName;
for (var i = 0; i < urlVariables.length; i++) {
varName = urlVariables[i].split('=');
if (varName[0] === info) {
return varName[1] === undefined ? null : varName[1];
}
}
}
// ** DROPDOWN ** //
function anime() {
var animeDropmenu = document.querySelector('#nav > li:nth-child(1) > ul');
var newli1 = document.createElement('li');
var html1 = "<a id=\"randAnime\" href=\"javascript:void(0)\">Random Anime</a>";
newli1.innerHTML = html1;
animeDropmenu.insertBefore(newli1, document.querySelector('#nav > li:nth-child(1) > ul > li:nth-child(3)').nextSibling);
newli1.addEventListener('click', function() {
initSearching();
getRandomAnime();
});
}
function manga() {
var mangaDropmenu = document.querySelector('#nav > li:nth-child(2) > ul');
var newli2 = document.createElement('li');
var html2 = '<a id="randManga" href="javascript:void(0)">Random Manga</a>';
newli2.innerHTML = html2;
mangaDropmenu.insertBefore(newli2, document.querySelector('#nav > li:nth-child(2) > ul > li:nth-child(2)').nextSibling);
newli2.addEventListener('click', function() {
initSearching();
getRandomManga();
});
}
function person() {
var industryDropmenu = document.querySelector('#nav > li:nth-child(4) > ul');
var newli3 = document.createElement('li');
var html3 = '<a id="randPerson" href="javascript:void(0)">Random Person</a>';
newli3.innerHTML = html3;
industryDropmenu.insertBefore(newli3, document.querySelector('#nav > li:nth-child(4) > ul > li:nth-child(3)').nextSibling);
newli3.addEventListener('click', function() {
initSearching();
getRandomPeople();
});
}
function character() {
var industryDropmenu = document.querySelector('#nav > li:nth-child(4) > ul');
var newli4 = document.createElement('li');
var html4 = '<a id="randCharacter" href="javascript:void(0)">Random Character</a>';
newli4.innerHTML = html4;
industryDropmenu.insertBefore(newli4, document.querySelector('#nav > li:nth-child(4) > ul > li:nth-child(5)').nextSibling);
newli4.addEventListener('click', function() {
initSearching();
getRandomCharacter();
});
}
// ** FIND RANDOM ** //
function getRandomAnime() {
updateSearching();
var r = Math.floor(Math.random() * 63000);
$.get('/includes/ajax.inc.php?t=64&id=' + r, function(r###lt) {
if (r###lt.length > 29 && !r###lt.match(/(Hentai|Kids)/)) {
searchSuccess("Found random anime, redirecting...");
document.location.href = '/anime/' + r + '?random=true&randomType=anime';
} else {
getRandomAnime();
}
}).fail( function() {
getRandomAnime();
});
}
function getRandomManga() {
updateSearching();
var r = Math.floor(Math.random() * 185000);
$.get('/includes/ajax.inc.php?t=65&id=' + r, function(r###lt) {
if (r###lt.length > 0 && !r###lt.match(/(Hentai|Yaoi|Yuri|Kids)/)) {
searchSuccess("Found random manga, redirecting...");
document.location.href = '/manga/' + r + '?random=true&randomType=manga';
} else {
getRandomManga();
}
}).fail( function() {
getRandomManga();
});
}
function getRandomPeople() {
updateSearching();
var r = Math.floor(Math.random() * 85000);
$.get('/people/' + r, function(r###lt) {
searchSuccess("Found random person, redirecting...");
document.location.href = '/people/' + r + '?random=true&randomType=people';
}).fail( function() {
getRandomPeople();
});
}
function getRandomCharacter() {
updateSearching();
var r = Math.floor(Math.random() * 270000);
$.get('/character/' + r, function(r###lt) {
if(!$(r###lt).find('#content > div.badr###lt').length) {
searchSuccess("Found random character, redirecting...");
document.location.href = '/character/' + r + '?random=true&randomType=character';
} else {
getRandomCharacter();
}
}).fail( function() {
getRandomCharacter();
});
}
// ** SEARCHING ** //
function initSearching() {
cancelling = false;
$("#searchGrid").html('Searching: <span id="searchCounter">0</span>');
$("#gmSearchContainer").show();
}
function updateSearching() {
var counter = document.getElementById("searchCounter");
if (counter) {
var count = parseInt(counter.innerHTML);
if (count > 200) {
cancelSearching("Limit reached (Too Many Requests)! Please change your settings to be less specific...");
} else {
$(counter).html(count + 1);
}
}
}
function searchSuccess(text) {
$("#searchGrid").html(text);
$("#gmCancelSearchingButton").hide();
}
function cancelSearching(text) {
cancelling = true;
$("#searchGrid").html(text);
$("#gmCancelSearchingButton").hide();
$("#gmCloseSearchPopupButton").show();
}
function initSearchPopup() {
var popup_html = '';
popup_html += '<div id="gmSearchContainer" class="popup-container">';
popup_html += '    <div id="searchGrid"></div>';
popup_html += '    <div id="buttonsGrid">';
popup_html += '        <button id="gmCloseSearchPopupButton" type="button" style="display:none">Ok</button>';
popup_html += '        <button id="gmCancelSearchingButton" type="button">Cancel</button>';
popup_html += '    </div>';
popup_html += '</div>';
$("body").append(popup_html);
$("#gmCloseSearchPopupButton").click(function() {
$("#gmSearchContainer").hide();
$("#gmCloseSearchPopupButton").hide();
$("#gmCancelSearchingButton").show();
});
$("#gmCancelSearchingButton").click(function() {
cancelSearching("User cancelled searching");
$("#gmCancelSearchingButton").hide();
$("#gmCloseSearchPopupButton").show();
});
}
// *** CSS *** //
function injectCSS() {
var css = `
.popup-container {
display:                none;
text-align:             left;
position:               fixed;
top:                    50%;
left:                   50%;
padding:                20px;
background:             white;
border:                 3px double black;
border-radius:          1ex;
z-index:                777;
-ms-transform:           translate(-50%,-50%);
-moz-transform:          translate(-50%,-50%);
-webkit-transform:       translate(-50%,-50%);
transform:              translate(-50%,-50%);
}
#buttonsGrid {
display:                flex;
justify-content:        center;
}
#buttonsGrid button {
margin:                 1em 1.5em 0 1.5em;
}
#searchGrid {
text-align:             center;
font-size:              13px;
}
`;
var style = document.createElement("style");
style.type = "text/css";
if (style.styleSheet){
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
document.documentElement.appendChild(style);
}
})();