// ==UserScript== // @name Next-Episode -> NZBindex // @namespace armeagle.nl // @description Add search links to the Next-Episode main history page that link directly to NZBindex.nl // @include http://next-episode.net/ // @version 0.0.1.20140705065007 // @downloadURL https://update.greasyfork.icu/scripts/3024/Next-Episode%20-%3E%20NZBindex.user.js // @updateURL https://update.greasyfork.icu/scripts/3024/Next-Episode%20-%3E%20NZBindex.meta.js // ==/UserScript== var search_url_srp = '__________'; var search_url = 'http://nzbindex.nl/search/?q=' + search_url_srp +'&age=&max=25&sort=agedesc&minsize=300&nfo=&hidespam=0&hidespam=1&more=0'; // use search_url_srp to be replaced with a search string var arr_search_url_replace = {' ' : '+', '\\$\\#\\*!' : 'shit', '\\(US\\)': 'US', "Harry's": 'Harrys'}; // can set multiple replace strings this way. Occurances of 'key' are replaced with 'value' before the search string is entered in the search url // find all episode entries var arr_node_episodes = document.querySelectorAll('tr > td > span.footer a'); // some links are to the forum, parentnode is b.forumlinks for ( key in arr_node_episodes ) { var node_episode = arr_node_episodes[key]; // check whether it isn't a forum link if ( node_episode.parentNode !== undefined && node_episode.parentNode.className == 'forumlinks' ) { continue; } if ( node_episode.nextSibling === undefined ) { continue; } season_episode = formatSeasonEpisodeString(node_episode.nextSibling.nodeValue); /* // Find next
tag, so we can put the search link just before that. // TODO: while getting to this BR tag, store all text in intermediate text nodes var node_walker = node_episode; console.log(node_episode.nextSibling.nodeValue); var season_episode = ''; // find and store '(Season: x Episode: y)' string while ( node_walker !== null && (node_walker.nodeType != 1 || node_walker.nodeType == 1 && node_walker.tagName.toLowerCase() != 'br') ) { if ( node_walker.nodeType == 3 && node_walker.nodeValue.indexOf('Season') > 0) { season_episode = node_walker.nodeValue; } node_walker = node_walker.nextSibling; } season_episode = formatSeasonEpisodeString(season_episode); */ // create search string var search_string = node_episode.textContent +' '+ season_episode; // create search link var node_search_link = document.createElement('a'); node_search_link.setAttribute('href', createSearchString(search_string)); node_search_link.setAttribute('style', 'margin-left: 5px;'); node_search_link.textContent = 'search'; if ( node_episode.parentNode.tagName.toLowerCase() == 'strong' ) { node_episode.parentNode.appendChild(node_search_link); } else { node_episode.parentNode.insertBefore(node_search_link, node_episode.nextSibling.nextSibling.nextSibling); } } // Apply search_url_replace to the subject and insert it in the search_url function createSearchString(subject) { for ( key in arr_search_url_replace ) { subject = subject.replace(new RegExp(key, 'g'), arr_search_url_replace[key]); } return search_url.replace(search_url_srp, subject); } // clean up and format the '(Season: x Episode: y)' string function formatSeasonEpisodeString(seas_ep) { seas_ep = seas_ep.replace(/ /, '').replace(/ /, '').replace('(Season:', '').replace(')', '').replace('Episode:', ',').replace(' -', '').split(' , '); var season_snr = Number(seas_ep[0]); if ( season_snr < 10 ) { season_snr = '0'+ season_snr; } var episode_snr = Number(seas_ep[1]); if ( episode_snr < 10 ) { episode_snr = '0'+ episode_snr; } return 'S'+ season_snr + 'E' + episode_snr; }