NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Re-order episodes // @version 0.61 // @description Proof of Concept for re-ordering episodes // @match https://www.tvmaze.com/shows/*/episodes // @require https://code.jquery.com/ui/1.12.1/jquery-ui.js // @updateURL https://openuserjs.org/meta/gazza911/Re-order_episodes.meta.js // @grant none // @license MIT // // ==/UserScript== /* THIS IS NOT INTENDED TO MAKE ANY CHANGES ON TVMAZE THIS IS PURELY SO THAT IT CAN BE SEEN HOW EPISODES COULD BE RE-ORDERED IT ALSO GIVES AN OPPORTUNITY TO IDENTIFY & RESOLVE ANY ISSUES THAT COULD ARISE */ var seasonList = {}; $(document).ready(function(){ $('<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">').appendTo("head"); $("section.season").each(function(){ var season = $(this).prev().attr("id"); seasonList[season] = $(this).find("article.episode-row").length; }); $("section.season").sortable({ items: "article.episode-row", connectWith: "section.season", start: function(e, ui) { ui.item.startSeason = $(this).prev().attr("id"); ui.item.startPos = seasonList[ui.item.startSeason] - ui.item.index() + 1; }, update: function (event, ui) { var endSeason = ui.item.parent("section.season").prev().attr("id"); var newIndex, adjustedEnd, adjustedStart; if (endSeason != ui.item.startSeason) { // Using connectWith will make multiple calls to the update function if (ui.sender == null) { // Previous season seasonList[ui.item.startSeason]--; if (ui.item.startSeason != "Specials") { adjustedStart = seasonList[ui.item.startSeason] - ui.item.startPos + 1; $(this).children("article.episode-row:lt(" + adjustedStart + ")").each(function(){ var $div = $(this).children("div:first"); var number = $div.text(); number = parseInt(number) - 1; $div.text(number); }); } } else { // New season seasonList[endSeason]++; if (endSeason != "Specials") { newIndex = seasonList[endSeason] - ui.item.index() + 1; ui.item[0].children[0].innerText = newIndex; adjustedEnd = seasonList[endSeason] - newIndex; $(this).children("article.episode-row:lt(" + adjustedEnd + ")").each(function(){ var $div = $(this).children("div:first"); var number = $div.text(); number = parseInt(number) + 1; $div.text(number); }); } else { ui.item[0].children[0].innerText = "Special"; } } } else if (ui.item.startSeason != "Specials") { newIndex = seasonList[endSeason] - ui.item.index() + 1; adjustedEnd = seasonList[endSeason] - newIndex; adjustedStart = seasonList[endSeason] - ui.item.startPos; var adjustment = 1; ui.item[0].children[0].innerText = newIndex; if (adjustedStart > adjustedEnd) { var temp = adjustedStart + 1; adjustedStart = adjustedEnd + 1; adjustedEnd = temp; adjustment = -1; } $(this).children("article.episode-row").slice(adjustedStart, adjustedEnd).each(function(){ var $div = $(this).children("div:first"); var number = $div.text(); number = parseInt(number) + adjustment; $div.text(number); }); } } }); });