Unpin Seasonal Anime - MAL

Move pinned anime in Seasonal tab back to original spot. Currently works for all sorting filters except 'sort by licensor'.

// ==UserScript==
// @name         Unpin Seasonal Anime - MAL
// @namespace    https://gf.qytechs.cn/en/users/954974-crill0
// @version      0.1
// @description  Move pinned anime in Seasonal tab back to original spot. Currently works for all sorting filters except 'sort by licensor'.
// @author       Crill0
// @match        https://myanimelist.net/anime/season*
// @icon         https://cdn.myanimelist.net/images/favicon.ico
// @run-at       document-end
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';
    const sortOrder = document.querySelector('span.btn-sort-order.selected').id;

    var sortFunction;
    switch(sortOrder) {
        case 'members': {
            function getMembers(el) {
                const m = el.querySelector('.scormem-item.member').innerText;
                return m.endsWith('K') ? m.slice(0, -1) * 1000 : m.endsWith('M') ? m.slice(0, -1) * 1000000 : m;
            }
            sortFunction = (el, pinnedEl) => getMembers(el) < getMembers(pinnedEl);
        }
        break;
        case 'score': {
            const getScore = el => el.querySelector('.scormem-item.score').innerText;
            sortFunction = (el, pinnedEl) => getScore(el) < getScore(pinnedEl);
        }
        break;
        case 'title' : {
            const getTitle = el => el.querySelector('.link-title').innerText;
            sortFunction = (el, pinnedEl) => getTitle(pinnedEl).localeCompare(getTitle(el)) == -1 ? true : false;
        }
        break;
        case 'studio' : {
            const getStudio = el => el.querySelectorAll('.property')[0].querySelector('.item').innerText;
            sortFunction = (el, pinnedEl) => getStudio(pinnedEl).localeCompare(getStudio(el)) == -1 ? true : false;
        }
        break;
        case 'start_date': {
            const getStartDate = el => Date.parse(el.querySelector('.info').firstChild.innerText);
            sortFunction = (el, pinnedEl) => getStartDate(el) > getStartDate(pinnedEl);
        }
        break;
        default:
            sortFunction = null;
    }

    document.querySelectorAll('.seasonal-anime-list').forEach(movePinned);

    function movePinned(el) {
        const animeList = [...el.querySelectorAll("div.seasonal-anime")];
        const pinned = animeList.filter(a => a.innerHTML.match("pin-icon"));
        pinned.forEach(async function(pinnedEl) { 
            const afterEl = sortFunction == null ? null : animeList.find(el => !pinned.includes(el) && sortFunction(el, pinnedEl)); // Element after current pinned element when sorted
            if(afterEl == null) el.insertAdjacentHTML('beforeEnd', pinnedEl.outerHTML); // Insert at end
            else afterEl.insertAdjacentHTML('beforebegin', pinnedEl.outerHTML); // Insert before element
            pinnedEl.remove();
        });
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址