Sort Adventure Time Episodes by Episode Number

Sorts Adventure Time episodes by episode number on WatchCartoonOnline

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Sort Adventure Time Episodes by Episode Number
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Sorts Adventure Time episodes by episode number on WatchCartoonOnline
// @author       R1o23z
// @match        https://www.watchcartoononline.com/detail/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Wait for the page to fully load
    window.addEventListener('load', function() {
      const container = document.querySelector('.episode-column .content');
      if (!container) return;

      // Clear old content
      container.innerHTML = '';

      // function splitTitleEpisode(input) {
      //   const match = input.match(/(.*?)(Episode\s*\d+\b.*)/i);
      //     if (match) {
      //       const title = match[1].trim();   // e.g., "Adventure Time Season 10"
      //       const episode = match[2].trim(); // e.g., "Episode 2"
      //       return [title, episode];
      //     }
      //   return [input, '']; // fallback if no match
      // }

      const sortedBySeasonList = playlist.map(ep => {
        // const season = ep[2].split('/')[1].slice(-1)
        const match = ep[2].split('/')[1].trim().match(/(\d+)\s*$/);
        if(match) {
          return [...ep, match[1]]
        } else {
          return [...ep, null]
        }
      }).sort((a, b) => {
        if(!a[4] || !b[4]) {
          return +a[4] - +b[4]
        }
        //sort by season
        if(a[4] === b[4]) {
          return +a[3] - +b[3] //sort by episode
        }
        return +a[4] - +b[4]
      })

      sortedBySeasonList.forEach(ep => {
      const card = document.createElement('div');
      card.className = 'category-card';

      /*
       * ep[0]: title
       * ep[1]: banner (termid)
       * ep[2]: url
       * ep[3]: episode
       * ep[4]: season - 1
       *
       * function changeVideo('${ep.title}','${ep.termid}','${ep.url}','${ep.episode}', '${ep.season}')
       */
      card.innerHTML = `
        <div class="poster">
          <img src="/thumb.php?termid=${ep[1]}" alt="banner" style="width: 100px">
        </div>
        <div class="content">
          <a href="javascript:changeVideo('${ep[0]}','${ep[1]}','${ep[2]}','${ep[3]}', '${ep[4]+1}')"
             class="serie-title">${ep[0]}</a>
          <div class="badge-list">
            <span class="badge img-lg"><img src="/assets/img/icons/dub.png" alt=""></span>
          </div>
          <div class="info">
            <span class='s_gizle'>TV 202</span>
            <div class="rating">
            <span>
              <img src="/assets/img/star.svg" width="10" alt="star"/> 7.8/10
            </span>
              <span class="eps-count">${ep[3]}</span>
            </div>
          </div>
        </div>
      `;

      container.appendChild(card);
    });
    });
})();