NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name MAM Request Finder // @version 4 // @description Add search buttons on requests page // @author BlackCoyote // @license MIT // @include http*://www.myanonamouse.net/tor/requests2.php // @include http*://www.myanonamouse.net/tor/viewRequest* // @include http*://www.myanonamouse.net/preferences/index.php // @include http*://www.myanonamouse.net/preferences/index.php?view=general // @include https://www.myanonamouse.net/tor/browse.php* // @require https://code.jquery.com/jquery-3.3.1.min.js" // @require https://gist.github.com/raw/2625891/waitForKeyElements.js // @grant GM_setValue // @grant GM_getValue // @run-at document-idle // ==/UserScript== function optionPageBuilder(page){$('#mainBody').append($('<h1>').text("Request Helper Settings"));$('#mainBody').append($('<table>').attr('style','width:100%;min-width:100%;max-width:100%').attr('class','coltable').attr('cellspacing',1).append($('<tr>').append($('<td>').attr('class','row2').attr('valign','top').attr('align','right').text('request page')).append($('<td>').attr('class','row1').attr('valign','top').attr('align','left').text('Which buttons should be displayed on requests page?').append($('<div>').append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('pMAM')).attr('name','pMAM').attr('class','RH-option').attr('id','pMAM')).append($('<label>').attr('for','pMAM').text('MAM')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('pOverdrive')).attr('name','pOverdrive').attr('class','RH-option').attr('id','pOverdrive')).append($('<label>').attr('for','pOverdrive').text('Overdrive')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('pAmazon')).attr('name','pAmazon').attr('class','RH-option').attr('id','pAmazon')).append($('<label>').attr('for','pAmazon').text('Amazon')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('pAudible')).attr('name','pAudible').attr('class','RH-option').attr('id','pAudible')).append($('<label>').attr('for','pAudible').text('Audible')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('pOpenlib')).attr('name','pOpenlib').attr('class','RH-option').attr('id','pOpenlib')).append($('<label>').attr('for','pOpenlib').text('OpenLibrary')).append($('<br/>'))))).append($('<tr>').append($('<td>').attr('class','row2').attr('valign','top').attr('align','right').text('View Request')).append($('<td>').attr('class','row1').attr('valign','top').attr('align','left').text('Which buttons should be displayed on the View Request page?').append($('<div>').append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('vMAM')).attr('name','vMAM').attr('class','RH-option').attr('id','vMAM')).append($('<label>').attr('for','vMAM').text('MAM')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('vOverdrive')).attr('name','vOverdrive').attr('class','RH-option').attr('id','vOverdrive')).append($('<label>').attr('for','vOverdrive').text('Overdrive')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('vAmazon')).attr('name','vAmazon').attr('class','RH-option').attr('id','vAmazon')).append($('<label>').attr('for','vAmazon').text('Amazon')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('vAudible')).attr('name','vAudible').attr('class','RH-option').attr('id','vAudible')).append($('<label>').attr('for','vAudible').text('Audible')).append($('<br/>')).append($('<input>').attr('type','checkbox').attr('checked',GM_getValue('vOpenlib')).attr('name','vOpenlib').attr('class','RH-option').attr('id','vOpenlib')).append($('<label>').attr('for','vOpenlib').text('OpenLibrary')).append($('<br/>'))))).append($('<tr>').append($('<td>').attr('class','row2').attr('valign','top').attr('align','right').text('Browse torrents')).append($('<td>').attr('class','row1').attr('valign','top').attr('align','left').text('Where requests button should appear?').append($('<div>').append($('<input>').attr('type','radio').attr('checked',GM_getValue('bRequestsALL')).attr('name','bRequests').attr('class','RH-option').attr('id','bRequestsALL')).attr('value','ALL').append($('<label>').attr('for','bRequestsALL').text('Everywhere')).append($('<br/>')).append($('<input>').attr('type','radio').attr('checked',GM_getValue('bRequestsMINE')).attr('name','bRequests').attr('class','RH-option').attr('id','bRequestsMINE')).attr('value','MINE').append($('<label>').attr('for','bRequestsMINE').text('My Uploads only')).append($('<br/>')).append($('<input>').attr('type','radio').attr('checked',GM_getValue('bRequestsNONE')).attr('name','bRequests').attr('class','RH-option').attr('id','bRequestsNONE')).attr('value','NONE').append($('<label>').attr('for','bRequestsNONE').text('Nowhere')).append($('<br/>'))))).append($('<tr>').append($('<td>').attr('class','row2').attr('valign','top').attr('align','right')).append($('<td>').attr('class','row1').attr('valign','top').attr('align','right').text('This section saves only Request Helper options. These options are saved on local storage only').append($('<br/>')).append($('<button>').text('Save').attr('style','margin: 10px 10px 10px 0; cursor: pointer').attr('id','RH-save')).append($('<span>').attr('id','RH-saved').attr('style','color: green;'))))) $('#RH-save').click(saveOptions)} function loadOptions(){let options=['pMAM','pOverdrive','pAmazon','pAudible','pOpenlib','vMAM','vOverdrive','vAmazon','vAudible','vOpenlib','bRequestsALL'];options.forEach(el=>{GM_getValue(el)===undefined?GM_setValue(el,!0):null})} function saveOptions(){$('.RH-option').each((i,el)=>{GM_setValue(el.id,el.checked)});$('#RH-saved').text('SAVED');setTimeout(function(){$('#RH-saved').text('')},3000)} function defaultOptions(){$('.RH-option').each((i,el)=>{el.checked=!0});$('.RH-option').each((i,el)=>{el.checked=!0})} function btnMamBuilder(title){const mam_url='https://www.myanonamouse.net/tor/browse.php?tor[text]='+escape(title)+'&tor[srchIn][title]=true&tor[srchIn][tags]=true&tor[srchIn][author]=true&tor[srchIn][narrator]=true&tor[searchType]=all&tor[searchIn]=torrents&tor[cat][]=0&tor[browseFlagsHideVsShow]=0&tor[hash]=&tor[sortType]=default&tor[startNumber]=0';return'<input style="margin: 5px;" type="button" onclick="window.open(\''+mam_url+'\',\'_blank\')" value="MAM" />'} function btnOverdriveBuilder(title){const overdrive_url='https://www.overdrive.com/search?q='+escape(title)+'&autoLibrary=t&f-consortium=all%7cAll+saved+librarie';return'<input style="margin: 5px;" type="button" onclick="window.open(\''+overdrive_url+'\',\'_blank\')" value="Overdrive" />'} function btnAmazonBuilder(title){const amazon_url='https://www.amazon.com/s?url=search-alias%3Daps&field-keywords='+escape(title);return'<input style="margin: 5px;" type="button" onclick="window.open(\''+amazon_url+'\',\'_blank\')" value="Amazon" />'} function btnOpenlibBuilder(title){const openlib_url='https://openlibrary.org/search?q='+escape(title)+'&has_fulltext=true';return'<input style="margin: 5px;" type="button" onclick="window.open(\''+openlib_url+'\',\'_blank\')" value="OpenLib" />'} function btnAudibleBuilder(title){const audible_url='https://www.audible.com/search?keywords='+escape(title);return'<input style="margin: 5px;" type="button" onclick="window.open(\''+audible_url+'\',\'_blank\')" value="Audible" />'} function btnRequestsBuilder(title,id){return'<br><input style="margin: 5px;" type="button" id="'+id+'" value="Requests" />'} function SearchRequest(title){const request_url='https://www.myanonamouse.net/tor/requests2.php';GM_setValue('tmpQuery',title);window.open(request_url,"_blank")} function loadButtons(){if(!!GM_getValue('tmpQuery')){$('#torTitle').val(GM_getValue('tmpQuery'));$('#requestSearch').submit()} GM_setValue('tmpQuery',null) let requests=document.getElementsByClassName('torRow');for(var i=0;i<requests.length;++i){let helper=requests[i].getElementsByClassName("helper")[0];if(!!helper){requests[i].removeChild(helper)} const elTitle=requests[i].getElementsByClassName('torTitle')[0];if(!elTitle){continue} const title=elTitle.innerHTML;let area=document.createElement('div');area.setAttribute("class","helper");!GM_getValue('pMAM')?null:area.innerHTML+=btnMamBuilder(title);!GM_getValue('pOverdrive')?null:area.innerHTML+=btnOverdriveBuilder(title);!GM_getValue('pAmazon')?null:area.innerHTML+=btnAmazonBuilder(title);!GM_getValue('pAudible')?null:area.innerHTML+=btnAudibleBuilder(title);!GM_getValue('pOpenlib')?null:area.innerHTML+=btnOpenlibBuilder(title);requests[i].appendChild(area)}} function loadButtonsIndividualPage(){let request=document.getElementById('torDetMainCon');let title_element=document.querySelector('div.torDetRow:nth-child(1) > div:nth-child(2)').firstChild;let title=title_element.innerHTML;let area=document.querySelector('div.torDetRow:last-child > div:nth-child(2)');area.lastChild.innerHTML='' !GM_getValue('vMAM')?null:area.innerHTML+=btnMamBuilder(title);!GM_getValue('vOverdrive')?null:area.innerHTML+=btnOverdriveBuilder(title);!GM_getValue('vAmazon')?null:area.innerHTML+=btnAmazonBuilder(title);!GM_getValue('vAudible')?null:area.innerHTML+=btnAudibleBuilder(title);!GM_getValue('vOpenlib')?null:area.innerHTML+=btnOpenlibBuilder(title)} function loadButtonsUploadsPage(){$('.newTorTable > tbody > tr > td:nth-child(3)').each((i,el)=>{let title=$('.title')[i].innerHTML let id='RH-reqbtn'+i el.innerHTML+=btnRequestsBuilder(title,id);$('#'+id).click(function(){SearchRequest(title)})})} loadOptions();let page=window.location.href;let optionsPage=page.search('/preferences/')!==-1;waitForKeyElements(".torRow",loadButtons);waitForKeyElements("#torDetMainCon",loadButtonsIndividualPage);if((GM_getValue('bRequestsALL'))||(GM_getValue('bRequestsMINE'))&&page.search('tor%5BsearchIn%5D=mine')!==-1){waitForKeyElements(".newTorTable",loadButtonsUploadsPage)} optionsPage?optionPageBuilder():null