// ==UserScript== // @name RARBG Advanced Filters [No Porn Edition] // @namespace http://tampermonkey.net/ // @version 1.62 // @description Just like RARBG Advanced Filters with the benefit of permanently removing pornography for those who would rather not see such content. Forked off of v1.42. // @author Kxmode // @contributor darkred, phpcitizen, fixed // @license MIT // @include /(https?:)?\/\/(www\.)?(proxy|unblocked)?rarbg((2018|2019|2020|2021)?|access(ed)?|cdn|core|data|enter|get|go|index|mirror(ed)?|p2p|prox(ied|ies|y)|prx|to(r|rrents)?|unblock(ed)?|way|web)\.(to|com|org|is)\/((index\d{2}|torrents)\.php.*|torrent|catalog\/.*|s\/.*|tv\/.*|top10)/ // @grant none // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // @run-at document-idle // @downloadURL none // ==/UserScript== /*jshint esversion: 6 */ const $ = (window).$; $(function() { // Define general variables let nonStandardUrlParams = (GetParameterByName('category%5B%5D') !== null || GetParameterByName('category[]') !== null) ? true : false, arrayCurrentUrlParams = -1, showAdvancedOptions = false, showIcon, showTorrentThumbnail, // TODO: child of showIcon (=true) showMoviesTVFilters, genreFilter = '', currentUrlNormal, currentUrlAbnormal, i; // Define Category specific filters let minRating, searchGenre, gameGroup, musicGenre, showKORSUB, show720p; // Define array of known RARBG categories let arrayMovies = ['movies', 14, 17, 42, 44, 45, 46, 47, 48, 50, 51, 52, 54].map(String), arrayTVShows = [18, 41, 49].map(String), arrayGames = [27, 28, 29, 30, 31, 32, 40].map(String), arrayMusic = [23, 24, 25, 26].map(String), arraySoftware = [33, 34, 43].map(String), arrayNonPorn = [14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52].map(String); // Define conditional checks let isCategoryMovies, isCategoryTVShows, isCategoryGames, isCategoryMusic, isCategorySoftware, isCategoryNonPorn; // Define booleans let categoryMoviesArray, categoryTVShowsArray, categoryGamesArray, categoryMusicArray, categorySoftwareArray, categoryNonPornArray; // This logic normalizes RARBG's inconsistent URL parameter types (e.g. category=movies, category%5B%5D=48, category=1;18;41;49;, and category[]=42) if (nonStandardUrlParams) { currentUrlNormal = new RegExp('[\?&]category%5B%5D=([^]*)').exec(window.location.href); // Grab all URL parameters %5B%5D currentUrlAbnormal = new RegExp('[\?&]category\[[^\[\]]*\]=([^]*)').exec(window.location.href); // Grab all URL parameters [] if (currentUrlNormal === null && currentUrlAbnormal === null) { // If neither unique parameter exists, then stop this logic, and return nothing return null; } else { // Otherwise... if (currentUrlAbnormal !== null) { // If URL parameters is [] (abnormal) arrayCurrentUrlParams = String(currentUrlAbnormal).match(/(=)\w+/g).map(String); // Create an array of values separated by the equal sign } else { // Otherwise conclude URL parameters are normal (%5B%5D) arrayCurrentUrlParams = String(currentUrlNormal).match(/(=)\w+/g).map(String); // Create an array of values separated by the equal sign } for (i = 0; i < arrayCurrentUrlParams.length; i++) { // Iterate through array look for equal signs arrayCurrentUrlParams[i] = arrayCurrentUrlParams[i].replace('=', ''); // Remove the equal sign from the array } } } else if (GetParameterByName('category') !== null || arrayCurrentUrlParams.length > -1) { // Otherwise this is a standard URL parameter arrayCurrentUrlParams = GetParameterByName('category').split(';').map(String); // Create an array of values separated by the semicolon } // Compares current url parameters with known RARBG categories. If the value is greater than -1 we have at least one match. if (GetParameterByName('category') !== null || arrayCurrentUrlParams.length > -1) { // Navigate through each array to find and set the match to true. For now there can only be one match. for (let item of arrayCurrentUrlParams) { isCategoryMovies = arrayMovies.indexOf(item); categoryMoviesArray = (isCategoryMovies !== -1) ? true : false; if (categoryMoviesArray) { break; } } for (let item of arrayCurrentUrlParams) { isCategoryTVShows = arrayTVShows.indexOf(item); categoryTVShowsArray = (isCategoryTVShows !== -1) ? true : false; if (categoryTVShowsArray) { break; } } for (let item in arrayCurrentUrlParams) { isCategoryGames = arrayGames.indexOf(item); categoryGamesArray = (isCategoryGames !== -1) ? true : false; if (categoryGamesArray) { break; } } for (let item in arrayCurrentUrlParams) { isCategoryMusic = arrayMusic.indexOf(item); categoryMusicArray = (isCategoryMusic !== -1) ? true : false; if (categoryMusicArray) { break; } } for (let item in arrayCurrentUrlParams) { isCategorySoftware = arraySoftware.indexOf(item); categorySoftwareArray = (isCategorySoftware !== -1) ? true : false; if (categorySoftwareArray) { break; } } for (let item in arrayCurrentUrlParams) { isCategoryNonPorn = arrayNonPorn.indexOf(item); categoryNonPornArray = (isCategoryNonPorn !== -1) ? true : false; if (categoryNonPornArray) { break; } } } // Method to grab the Parameter name and value (Note: single use only. See line 60 for multiple URL parameters and if needed move to function.) function GetParameterByName(name, url) { // credit: https://stackoverflow.com/a/901144 (Modified by Kxmode) // Used under StackOverflow's standard CC BY-SA 3.0 license if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$|((%\d\D)*\D\d*))'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } // Method to activate and deactive filters inside the Advanced Filter's HTML box function ToggleFilter(target, data, bool, optional) { optional = (optional !== undefined) ? true : false; let targetID = target.replace('#',''); if (bool) { if (!optional) { $(target).find('i').removeClass('fa-eye-slash').addClass('fa-eye'); $(target).removeClass('disabled'); } $(target).attr(data, 'true'); window.localStorage.setItem(targetID, 'true'); } else { if (!optional) { $(target).find('i').removeClass('fa-eye').addClass('fa-eye-slash'); $(target).addClass('disabled'); } $(target).attr(data, 'false'); window.localStorage.setItem(targetID, 'false'); } } // Method to show and hide the Advanced Filter's HTML box function ToggleAdvancedFilters(bool, isClicked) { isClicked = (isClicked !== undefined) ? true : false; let parentTarget = $('.new-search form'); let target = $('.advanced-search'); if (GetParameterByName('category') !== null && isClicked === false) { if (bool) { window.localStorage.setItem('shadvbutton', 'true'); parentTarget.removeAttr('style'); parentTarget.removeClass('disabled'); target.show(); $('#shadvbutton').text('«'); } else { parentTarget.attr('style', 'width: 100%; border-right: 1px solid #9faabc;'); target.hide(); $('#shadvbutton').text('»'); } } else if (GetParameterByName('category') === null && isClicked === false) { $('#shadvbutton').attr('data-shadvbutton', 'false'); window.localStorage.setItem('shadvbutton', 'false'); parentTarget.attr('style', 'width: 100%; border-right: 1px solid #9faabc;'); target.hide(); $('#shadvbutton').text('»'); } else { if (bool) { if (typeof showhideadvsearch !== 'undefined') { showhideadvsearch('show'); } parentTarget.removeAttr('style'); parentTarget.removeClass('disabled'); target.show(); $('#shadvbutton').text('«'); } else { parentTarget.attr('style', 'width: 100%; border-right: 1px solid #9faabc;'); target.hide(); $('#shadvbutton').text('»'); } } } $('#searchTorrent').parent().addClass('new-search'); // Removes extra space between Recommended torrents and search bar $('#searchTorrent').parent().parent().find('div:nth-of-type(2)').remove(); for(i = 1; i <= 4; i++) { $('#searchTorrent').parent().parent().find('br:nth-of-type(1)').remove(); } // Fixes a bug in this script affecting the formatting of IMDB searches (?imdb=tt0448115) in darkred's 'RARBG - various tweaks'; if ($('.new-search').next().attr('class') === undefined) { $('.new-search').next().find('table tr td:last-child').addClass('advanced-search-formatting-fix'); $('
').insertBefore('.advanced-search-formatting-fix b:nth-of-type(-n+5)'); } // Attaches FontAwesome script to display active and inactive 'eye' icons. fontawesome.io for more info. $('head').append( ''); // Attaches CSS for the custom Advanced Filters HTML box. $("head").append( ''); // Creates the HTML for category specific filters if (GetParameterByName("category") === null || categorySoftwareArray) { genreFilter = '
\n'; } else { genreFilter = '
\n'; } // TODO: Handle for: if (GetParameterByName("category") !== null || arrayCurrentUrlParams.length > -1 || nonStandardUrlParams) ---------- if (GetParameterByName('category') !== null || nonStandardUrlParams) { if (categoryMoviesArray || categoryTVShowsArray) { genreFilter += '\n' + '
KORSUB
\n' + '
720p
\n' + '\n'; } else if (categoryGamesArray) { genreFilter += '\n'; } else if (categoryMusicArray) { genreFilter += '
Genre
\n'; } else if (categorySoftwareArray) { // genreFilter += '
Software Filters Coming Soon
\n'; // Not enough to warrant this for now } else if (categoryNonPornArray) { genreFilter += '
Non Porn Filters Coming Soon
\n'; } } else { // genreFilter += '
All Filters Coming Soon
\n'; // Not enough to warrant this for now } genreFilter += '
\n'; // Creates the Advanced Filter HTML box let AdvancedFiltersHTML = ''; // Attaches Advanced Filters HTML box to RARBG $('#searchTorrent').parent().append(AdvancedFiltersHTML); // TODO: Likely going to need to move the ToggleFilter and ToggleAdvancedFilters method calls into this gated logic if (nonStandardUrlParams) { ToggleFilter('#shadvbutton', 'data-shadvbutton', showAdvancedOptions, true); ToggleAdvancedFilters(true, true); } else { showAdvancedOptions = ((window.localStorage.getItem('shadvbutton') == 'true') ? true : false); ToggleFilter('#shadvbutton', 'data-shadvbutton', showAdvancedOptions, true); ToggleAdvancedFilters(showAdvancedOptions); } // Logic for HTML box icons showIcon = ((window.localStorage.getItem('jQIcon') == 'false') ? false : true); ToggleFilter('#jQIcon', 'data-icon', showIcon); showTorrentThumbnail = ((window.localStorage.getItem('jQTorrentThumbnail') == 'false') ? false : true); ToggleFilter('#jQTorrentThumbnail', 'data-torrent-thumbs', showTorrentThumbnail); showKORSUB = ((window.localStorage.getItem('jQKORSUB') == 'false') ? false : true); ToggleFilter('#jQKORSUB', 'data-korsub', showKORSUB); show720p = ((window.localStorage.getItem('jQ720p') == 'false') ? false : true); ToggleFilter('#jQ720p', 'data-720p', show720p); $('#shadvbutton').on('click', function() { showAdvancedOptions = ($(this).attr('data-shadvbutton') == 'false') ? true : false; ToggleFilter('#shadvbutton', 'data-shadvbutton', showAdvancedOptions, true); ToggleAdvancedFilters(showAdvancedOptions, true); }); $('#jQIcon').on('click', function() { showIcon = ($(this).attr('data-icon') == 'false') ? true : false; ToggleFilter('#jQIcon', 'data-icon', showIcon); }); $('#jQTorrentThumbnail').on('click', function() { showTorrentThumbnail = ($(this).attr('data-torrent-thumbs') == 'false') ? true : false; ToggleFilter('#jQTorrentThumbnail', 'data-torrent-thumbs', showTorrentThumbnail); }); $('#jQKORSUB').on('click', function() { showKORSUB = ($(this).attr('data-korsub') == 'false') ? true : false; ToggleFilter('#jQKORSUB', 'data-korsub', showKORSUB); }); $('#jQ720p').on('click', function() { show720p = ($(this).attr('data-720p') == 'false') ? true : false; ToggleFilter('#jQ720p', 'data-720p', show720p); }); // Movies and TV Shows only if (categoryMoviesArray || categoryTVShowsArray) { if (window.localStorage.getItem('minimum-rating') > 0) { let mr = window.localStorage.getItem('minimum-rating'); $('#jQIMDB').find('input').attr('value', mr); minRating = mr; } else { $('#jQIMDB').find('input').attr('value', 0); } if (window.localStorage.getItem('media-genre') !== null) { let gen = window.localStorage.getItem('media-genre'); $('#jQgenre').find('input').attr('value', gen); searchGenre = gen.toLowerCase(); } } // Games only if (categoryGamesArray) { if(window.localStorage.getItem('game-group') !== undefined) { let gg = window.localStorage.getItem('game-group'); $('#jQGamingGroup').find('input').attr('value', gg); gameGroup = gg; } else { $('#jQGamingGroup').find('input').removeAttr('value'); } } // Music only if (categoryMusicArray) { if(window.localStorage.getItem('music-genre') !== undefined) { let mg = window.localStorage.getItem('music-genre'); $('#jQMusicGenre').find('input').attr('value', mg); musicGenre = mg; } else { $('#jQMusicGenre').find('input').removeAttr('value'); } } // Input click event $('#jQIMDB input, #jQGamingGroup input, #jQMusicGenre input, #jQgenre input').on('keydown', function() { if (event.which == 13 || event.keyCode == 13) { $('.jQUpdateFilters').click(); } }); // Events for the 'Update Filters' button $('.jQUpdateFilters').on('click', function () { if (categoryMoviesArray || categoryTVShowsArray) { let minRating = $('#jQIMDB').parent().find('input').val(); window.localStorage.setItem('minimum-rating', minRating); let genre = $('#jQgenre').find('input').val(); window.localStorage.setItem('media-genre', genre); } if (categoryGamesArray) { let gameGroup = $('#jQGamingGroup').parent().find('input').val(); window.localStorage.setItem('game-group', gameGroup); } if (categoryMusicArray) { let musicGenre = $('#jQMusicGenre').parent().find('input').val(); window.localStorage.setItem('music-genre', musicGenre); } location.reload(); }); // Events for the 'Reset Filters' button $('.jQResetFilters').on('click', function() { window.localStorage.removeItem('jQIcon'); window.localStorage.removeItem('jQTorrentThumbnail'); window.localStorage.removeItem('jQKORSUB'); window.localStorage.removeItem('jQ720p'); window.localStorage.removeItem('media-genre'); window.localStorage.removeItem('minimum-rating'); window.localStorage.removeItem('game-group'); window.localStorage.removeItem('music-genre'); location.reload(); }); // Removes Movie filters after clicking the 'View all' link $('.tdlinkfull2').on('click', function() { if ($(this).text() === 'View all') { window.localStorage.removeItem('jQKORSUB'); window.localStorage.removeItem('jQ720p'); window.localStorage.removeItem('minimum-rating'); window.localStorage.removeItem('game-group'); window.localStorage.removeItem('music-genre'); window.localStorage.removeItem('media-genre'); } }); // CATEGORY SPECIFIC ================================================================================================= // Hides torrents with seeders equal to or lower than a number [TODO: make this a form input filter] // use inArray method from work (Configurator height normalizer) /* if (parseInt(title.indexOf('720p')) > 0) { $(this).parents('.lista2').remove(); } */ // Logic to hide porn $.each($('.tdlinkfull2'), function() { const TARGET_TEXT = $(this).text().toLowerCase(); if (TARGET_TEXT == 'xxx') { $(this).parent().parent().remove(); } }); $.each($('.divadvscat a'), function() { const TARGET_TEXT = $(this).text().toLowerCase(); if(TARGET_TEXT == 'xxx (18+)') { $(this).parent().remove(); } }); // Loops through all torrents looking at each span tag $.each($('.lista span'), function(index, value) { const GENRE = $(this).text().toLowerCase(); if (GENRE !== undefined) { // Creates the logic for category specific filters if (GetParameterByName('category') !== null || nonStandardUrlParams) { if (categoryMoviesArray || categoryTVShowsArray) { // Genres if (GENRE.search(searchGenre) == -1) { $(this).parents('.lista2').remove(); } } } } }); // Loops through all torrents looking at each anchor tag $.each($('.lista a'), function(index, value) { let title = $(this).attr('title'); let icon = $(this).find('img').attr('src'); if (title !== undefined) { // Logic to hide KORSUB torrents if (!showKORSUB) { if (parseInt(title.indexOf('KORSUB')) > 0) { $(this).parents('.lista2').remove(); } } // Logic to hide 720p torrents if (!show720p) { if (parseInt(title.indexOf('720p')) > 0) { $(this).parents('.lista2').remove(); } } // Creates the logic for category specific filters if (GetParameterByName('category') !== null || nonStandardUrlParams) { if (categoryMoviesArray || categoryTVShowsArray) { // IMDB Ratings $.each($('.lista:nth-child(2)'), function(index, value) { if ($(this).children('span').length) { const RATINGS = $(this).children('span').text(); const IMDB = RATINGS.indexOf('IMDB: ') + 6; const SCOPE_MIN_RATING = $('#jQIMDB').parent().find('input').val(); if (SCOPE_MIN_RATING > 0) { if (RATINGS !== undefined && IMDB !== -1) { minRating = parseFloat(minRating); const RATE_VALUE = parseFloat(RATINGS.substring(IMDB,RATINGS.length-3)); if (!isNaN(RATE_VALUE)) { if (showMoviesTVFilters) { $(this).children('span').attr('style', 'display: block;'); } if (RATE_VALUE <= minRating) { $(this).parents('.lista2').remove(); } } else { $(this).parents('.lista2').remove(); } } } } }); } // Game Torrent Group else if (categoryGamesArray) { $.each($('.lista2t a'), function(index, value) { if ($(this).attr('title') !== undefined) { const TORRENT_TITLE = $(this).attr('title'); const SEARCH_VALUE = TORRENT_TITLE.toLowerCase().indexOf(gameGroup); const COMPARE_VALUE = TORRENT_TITLE.substring(SEARCH_VALUE,TORRENT_TITLE.length); if (SEARCH_VALUE === -1 && gameGroup !== null) { $(this).parents('.lista2').remove(); } } }); } else if (categoryMusicArray) { $.each($('.lista2t .lista span:last-child'), function(index, value) { const GENRE_TITLE = $(this).text(); if (GENRE_TITLE !== undefined) { const SEARCH_VALUE = GENRE_TITLE.toLowerCase().indexOf(musicGenre); const COMPARE_VALUE = GENRE_TITLE.substring(SEARCH_VALUE,GENRE_TITLE.length); if (SEARCH_VALUE === -1 && musicGenre !== null) { $(this).parents('.lista2').remove(); } } }); } // Coming soon else if (categorySoftwareArray) { } else if (categoryNonPornArray) { } } } // Logic to hide porn if (title !== undefined) { title = title.indexOf('XXX'); if (title >= 0) { $(this).parents('.lista2').remove(); } } if (icon !== undefined) { icon = icon.indexOf('cat_new4.gif'); if (icon >= 0) { $(this).parents('.lista2').remove(); } } }); // NON-CATEGORY SPECIFIC ================================================================================================= // Logic to hide icons if (!showIcon) { $('.lista2t tr td:nth-of-type(1)').attr('style','display:none;'); } else { // TODO: Make child of showIcon (=true) // Logic to show torrent thumbnails if (showTorrentThumbnail) { const LOCAL_STORAGE_SETTING = 'RARBG-Advanced-Filters-Large-Thumbnails'; window.isLargeThumb = ( window.localStorage.getItem(LOCAL_STORAGE_SETTING) == 'true' ) ? true : false; if (window.isLargeThumb) { $('.lista2t').find('tr:first-child td:first-child').html('Thumbnail ()'); } else { $('.lista2t').find('tr:first-child td:first-child').html('Thumbnail ()'); } $.each($('.lista2t .lista2'), function() { const ANCHOR = $(this); $.each(ANCHOR.find('.lista'), function() { const IMAGE = $(this).find('a'); const TARGET = ANCHOR.find(':nth-child(1) a'); if (IMAGE.attr('onmouseover') !== undefined) { const HREF = IMAGE.attr('href'); const SOURCE_THUMB = IMAGE.attr('onmouseover'); let val1 = SOURCE_THUMB.match(/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/g).map(String)[0]; val1 = SOURCE_THUMB.lastIndexOf(val1); const VAL2 = SOURCE_THUMB.indexOf("\' border=0>')")-1; let imageID = SOURCE_THUMB.substring(val1,VAL2); if (window.isLargeThumb) { if (imageID.includes('static/over')) { let pvid = imageID.substring(22,23); imageID = imageID.replace('static/over','posters2/' + pvid); } if (imageID.includes('over_opt')) { imageID = imageID.replace('over_opt','poster_opt'); } if (imageID.includes('_small')) { imageID = imageID.replace('_small','_banner_optimized'); } } let thumbnailImage = ""; if (window.isLargeThumb) { if (imageID.includes('posters2/') || imageID.includes('poster_opt') || imageID.includes('_banner_optimized')) { $('.thumbnail').addClass('resize'); } } IMAGE.removeAttr('onmouseover').removeAttr('onmouseout'); TARGET.find('img').replaceWith(thumbnailImage); TARGET.attr('href', HREF); ANCHOR.find('td:nth-child(1)').attr( 'align', 'center' ); } }); }); $(document).on('click', '.jQlargeThumbs', function() { if(window.isLargeThumb) { window.localStorage.setItem(LOCAL_STORAGE_SETTING, 'false'); } else { window.localStorage.setItem(LOCAL_STORAGE_SETTING, 'true'); } window.location.href = window.location.href; }); } } // May need to update to DOM structure changes $("body > div:last-of-type").prev().prev().prev().remove(); $("body > div:last-of-type").prev().remove(); // Is Grid active? const SHOW_GRID = ((window.localStorage.getItem('advanced-search-grid-view') == 'true') ? true : false); // Creates the Grid button toggle const GRID_ICON = SHOW_GRID ? '' : ''; const TOOL_TIP = SHOW_GRID ? 'Show list view' : 'Show grid view'; $('#searchTorrent table tbody tr').prepend('' + GRID_ICON + ''); // Grid button toggle logic $(document).on('click', '.jQGridButton', function() { if (SHOW_GRID) { window.localStorage.setItem('advanced-search-grid-view', 'false'); } else { window.localStorage.setItem('advanced-search-grid-view', 'true'); } location.reload(); }); if (SHOW_GRID) { let isTorrentMagnetLinksScriptActive = false; // Determines if the torrent and magnet links script is installed $.each($('.lista2t tbody tr:first-child td'), function(index) { const CONTENT = $(this).html(); switch (CONTENT) { case 'DL ML': isTorrentMagnetLinksScriptActive = true; break; } }); // Creates the CSS for the grid $('
').insertBefore('.lista2t').prepend(''); if (isTorrentMagnetLinksScriptActive) { $('#TorrentGrid').prepend(''); } else { $('#TorrentGrid').prepend(''); } // Creates the grid $.each($('.lista2t .lista2'), function(index) { let parentIndex = index + 1; $('#TorrentGrid').append('
'); $.each($(this).find('td'), function(index) { let childIndex = index + 1; let target = $(this).closest('table').prev().find('div.grid-lista2:nth-of-type('+parentIndex+')'); target.append('
'); let currentElement = target.find('.lista:nth-of-type('+childIndex+')').eq(0); let fileName; currentElement.html($(this).html()); if (isTorrentMagnetLinksScriptActive) { switch (childIndex) { case 1: // thumbnail TD currentElement.addClass('thumb'); break; case 2: // file TD currentElement.addClass('file'); currentElement.find('a:first-child').addClass('alt-layout'); currentElement = currentElement.find('a:first-child'); fileName = currentElement.text().replace(/\./g,' '); currentElement.text(fileName); break; case 3: // DL ML TD - belongs to the torrent and magnet links script currentElement.addClass('mldl alt-darker'); currentElement.prepend('DL ML: '); break; case 4: // Added TD currentElement.addClass('added alt-deco'); currentElement.prepend('Added: '); break; case 5: // Size TD currentElement.addClass('size alt-size'); currentElement.prepend('Size: '); break; case 6: // Seed TD currentElement.addClass('seeders badge'); currentElement.prepend('Seeds: '); currentElement.find('font').removeAttr('color'); break; case 7: // Leecher TD currentElement.addClass('leechers badge'); currentElement.prepend('Leechers: '); currentElement.find('font').removeAttr('color'); break; case 8: // Comments TD currentElement.addClass('comments'); currentElement.prepend('# Comments: '); break; case 9: // Uploader TD currentElement.addClass('uploader'); currentElement.prepend('# Uploader: '); break; } } else { switch (childIndex) { case 1: // thumbnail TD currentElement.addClass('thumb'); break; case 2: // file TD currentElement.addClass('file'); currentElement.find('a:first-child').addClass('alt-layout'); currentElement = currentElement.find('a:first-child'); fileName = currentElement.text().replace(/\./g,' '); currentElement.text(fileName); break; case 3: // Added TD currentElement.addClass('added alt-deco'); currentElement.prepend('Added: '); break; case 4: // Size TD currentElement.addClass('size alt-size'); currentElement.prepend('Size: '); break; case 5: // Seed TD currentElement.addClass('seeders badge'); currentElement.prepend('Seeds: '); currentElement.find('font').removeAttr('color'); break; case 6: // Leecher TD currentElement.addClass('leechers badge'); currentElement.prepend('Leechers: '); currentElement.find('font').removeAttr('color'); break; case 7: // Comments TD currentElement.addClass('comments'); currentElement.prepend('# Comments: '); break; case 8: // Uploader TD currentElement.addClass('uploader'); currentElement.prepend('# Uploader: '); break; } } }); }); // Sorting Buttons $('
').insertBefore('#TorrentGrid'); $.each($('.lista2t tbody tr:first-child td'), function(index) { const CONTENT = $(this).html(); if (CONTENT.match('tdlinkfull3')) { const HREF = $(this).find('.tdlinkfull3').attr('href'); const BUTTON_ID = HREF.substring(HREF.lastIndexOf('order=')+6,HREF.indexOf('&by=')); let buttonName = BUTTON_ID.charAt(0).toUpperCase() + BUTTON_ID.substr(1).toLowerCase(); if (buttonName === 'Data') { buttonName = 'Added'; } $('#TorrentGridControls').append('Sort ' + buttonName + ''); } }); // Sorting title logic const URL = window.location.href; let sorting_by = URL.substring(URL.lastIndexOf('&by=')+4,URL.indexOf('&page=')); if (URL.indexOf('&page=') === -1) { sorting_by = URL.substring(URL.lastIndexOf('&by=')+4); } const BUTTON_ID = URL.substring(URL.lastIndexOf('order=')+6,URL.indexOf('&by=')); if (BUTTON_ID === 'https') { $('#TorrentGridControls').prepend('

Not Sorted

'); } else { let buttonName = BUTTON_ID.charAt(0).toUpperCase() + BUTTON_ID.substr(1).toLowerCase(); if (buttonName === 'Data') { buttonName = 'Added'; } $('#TorrentGridControls').prepend('

' + sorting_by + ' Sorted by ' + buttonName + '

'); } // Event trigger for sorting buttons $(document).on('click', '.jQGridSort', function (){ location.href = $(this).attr('href'); }); // Removes the list from the DOM $('.lista2t').remove(); } });