🏠 Home 

MAL manga default search

Make MyAnimelist search work faster for adding manga.


Install this script?
// ==UserScript==
// @name         MAL manga default search
// @namespace    http://tampermonkey.net/
// @version      2024-03-08
// @description  Make MyAnimelist search work faster for adding manga.
// @copyright    2024, Santeri Hetekivi (https://github.com/SanteriHetekivi)
// @license      Apache-2.0
// @author       Santeri Hetekivi
// @match        https://myanimelist.net/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=myanimelist.net
// @grant        none
// ==/UserScript==
(function () {
'use strict';
// Base timeout.
const TIMEOUT_MS = 100
// Id for select element.
const ID_SELECT = "topSearchValue"
// Id for text input element.
const ID_TEXT_INPUT = "topSearchText"
/**
* Get element by id.
* @param {string} id For this id.
* @param {function} callback Function to call with element.
* @param {?string} key If given, use this key for data.
*/
function getElementById(id, callback, key) {
// Get element by id.
const element = document.getElementById(id)
// Init data.
if (typeof getElementById.data !== "object") {
getElementById.data = {}
}
// If key is undefined
if (typeof key === "undefined") {
// generate key that is not in use.
do {
key = (Math.random() + 1).toString(36).substring(2)
} while (key in getElementById.data)
}
// Else if key is not in use
else if (!(key in getElementById.data)) {
// throw error.
throw new Error("Key '" + key + "' not found in getElementById.data!")
}
// Key has data.
const keyHasData = (typeof getElementById.data[key] === "object")
// If element found.
if (element) {
// If key has data
if (keyHasData) {
// and timeout is number
if (typeof getElementById.data[key].timeout === "number") {
// clear timeout.
clearTimeout(getElementById.data[key].timeout)
}
// delete data for key.
delete getElementById.data[key]
}
// Callback with element.
callback(element)
}
// Else if element not found.
else {
// If key has no data
if (!keyHasData) {
// init data.
getElementById.data[key] = { counter: 0, timeout: null }
}
// After timeout
getElementById.data[key].timeout = setTimeout(
function () {
// call again with same key.
getElementById(id, callback, key)
},
(
// Wait base timeout
TIMEOUT_MS
*
// times updated counter.
(getElementById.data[key].counter++)
)
)
}
}
// Get select element and
getElementById(
ID_SELECT,
function (element) {
// set value to manga.
element.value = "manga"
}
)
// Get text input element and
getElementById(
ID_TEXT_INPUT,
function (element) {
// focus on it.
element.focus()
}
)
})();