// ==UserScript== // @name Orpheus Collage Building Helper // @author Z4ppy // @namespace Z4ppy.What.CD // @description Make it easier to build your collage. // @include https://*orpheus.network/torrents.php* // @include https://*orpheus.network/collages.php* // @include https://*orpheus.network/collage.php* // @include https://*orpheus.network/artist.php* // @include https://*orpheus.network/bookmarks.php* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_xmlhttpRequest // @version 1.0.3 // @date 2017-05-26 // @downloadURL none // ==/UserScript== // Changelog can be found at https://greasyfork.org/en/scripts/25309-pth-collage-building-helper var collageID, collName; // Momenticons: http://findicons.com/icon/263495/folder_open_add var ICON_ADD = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACmUlEQVR4nIWRS0hVURSGv33Ovp57j0oqV7Qkil5mEwNDKoILikQjg6Jykg0qIrIkwkySbOANahBYCj0oigoLCyxqpFRIUHTLHlb0tCJTTK2b9+HjnLMbHDOjsjXca+1vfaxfKKVoOTUz/01X9N7IcBQAw5uMIWMFGyoHb/KfEsdqfGtT/HMb16xaCdHngILEbC5dvsrAlzdFW2riLZMCjtdmqk2l61H9t0BZgAPCQKQu5UxjE+Fw3/iwLr1k+FN9q7e9Hfr5JuOxMERegh0HoSN0AWoYwm2UFueCNNxJI5OO1zYfX7eKiQYSAMdGKRvLcjh7rZPYsBprP/ubdaxurwmApusfxgCjaFjcbu+ndONJpPMJhQ1MXOagCQVCgPJA2iKOHij56AJsBysWQU8rwjPchoo8RCg14bMABEoIUAphzuTtg26SszJ3ugAsbj+OEChejDNwEWVFQGhuSynQvOjmbPDNB6FD0ixaL1Tc3VzdFXIBQ1FsfwEy1o4T63PFhZsoykIz02joinDgfT0CRWnKEraXXAyOH/FWRz+BwCrUl3MwEgc0lyAT0BIyICmPnr4eqgM7kB548qjje/qcZRaQKQFsXzZG9D5WtMdVdlNHmnNp+Kpz5Ml5wqMRtqabSAmXum+YN05nXS5buKtJHN7jVeVlJ6D3Cox8++UuJGSsYHpLkOpAOb3RTtq7WvEmQv6MIqYmz2B382GklB7q6jf/LW9SprxD+B10zUbXwPCBYehIXSAlCARC/RbXHzXv0P3g/hMd9cWDo4MJlcvX6bqE4PVGO8mTPFK2cFfTpIBXn1t986YVpgB5++5UHVywwMyRmuDps+iLmqXBCmAsxn+tn1YYB+JAyG+mhyqba3NAsDO3KgSEgJ4f88//Bf3Zb/0AAAAASUVORK5CYII='; // Yusuke Kamiyamane: http://findicons.com/icon/118036/cross var ICON_ERR = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNrEU71OwlAUPrVqrDFBHsARX6AJri4kJSEyEBMHggkLK8EEFsauvoPo4iN04gkgLiYOOBHUxDSUCBO0XL9z7a1t1YnBJl967/l+enIOaEII2uTZog2fbXW41zTSiSwcbaAbEDl+TJTmLsLO4x1YIOzzTscMvoRWmjtrNn9yPAPGHdFg3W6Lx1JJLFstwXfACjF4r9clN6lWJad8UUAPwhsQXqMh+vm8eK3VBN8ZT+WyrA0LBVljrfJpags9zMBnAi2eVirm82hEmUyGFosFvUwmZBgGzcfjoYYZYCbOZehLBKzwDsKQo1zOnLqu5HRdpw/XlWYM09lBTQVEW3gDdsMChLSazWhfkUEgw9nCm1n+9TuAwILAPs5mTcP36QA1Ba4xJ5LbSa4RX7FPIFSmB88bMtSduVVqjVEAE8WYuQ8jvthl9GMhxe+QZMAcwlsI93DmN9/RrsP4jVO+aAtX2IKH1tZIR2o3C+NhKJoBae46vcZ/+zd+CjAAN5vaL1x3kMMAAAAASUVORK5CYII='; // Yusuke Kamiyamane: http://findicons.com/icon/119015/tick var ICON_OK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNpi/P//PwMlgImBQsACIhhnCAFZjEAGkANy0B8gwQ00m5kRogpEMYHl5YF4LZBXw/D3/47/Ea/xuOD7PwaGX1AMMvDvfwGGf/8nprkkGQPZLUAVHqR4gY3hH0Ofoby+6ZcvXxjinWL0Gf4wtMC9QAAwAjXXK0jIO8gLyUl9/Pzx98Fjh24AXdOA7gIPoP/PwJwGdvoPoNP/MGQIcwkGq4mrKHz5+uXf0UtH7wBdMRGodgvCgP9ATX/+tyT5JxqCaDAfIu7DwcSWJckjqfzgwQOGU5dP3f3w4cNSoJq5DL//I0Xjn38tMX4xes+ePWOK8IowAPGBmnNZ/jPVS4vLqH7985Xl5YcXDz99+rAJGIDtQAxxIcKA/zVLViy8xM7J9uvU7VPMDnaOOkAb4sVkxTV+sPxgf/fhzdOP797vZ/gLjD4Ghn8oAQRKiYx9/AxADaAwaDF2NtN6+vMZpwCnAMP7b+8Zfrz49vrj3fdHGJgZkhhYmT4wsELTC8iHWe+RAvE/ww6g02vO7jhxjfkv49fXjK8Zvn/5+uHTzXcXgSGeC1TxAWdKRDHk81+Gp5vutnCZ8Mt8v/DpDtCBeUBrnuJNyigAmEQZ3v9h+LbzTQsw+ZYwCLJcBydjXIlkwHMjQIABAIHQ3hY9qLekAAAAAElFTkSuQmCC'; // ajaxload.info var ICON_LOADING = 'data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA=='; var torrentCache = { Cache: [], GM_read: function () { this.clear(); this.Cache = JSON.parse(GM_getValue('torrentCache', '[]')); return this.Cache.length; }, GM_save: function () { return GM_setValue('torrentCache', JSON.stringify(this.Cache)); }, GM_delete: function () { GM_deleteValue('torrentCache'); }, add: function (torrentgroupid) { if (this.Cache.indexOf(torrentgroupid) != -1) { return false; } this.Cache.push(torrentgroupid); return true; }, contains: function (torrentgroupid) { return (this.Cache.indexOf(torrentgroupid) != -1); }, remove: function (torrentgroupid) { if (this.Cache.indexOf(torrentgroupid) == -1) { return false; } this.Cache.splice(this.Cache.indexOf(torrentgroupid), 1); return true; }, clear: function () { this.Cache.length = 0; } } var URL = new Object(); function parseURL() { var URLArr = document.URL.match(/^(https:\/\/(?:ssl\.)?orpheus\.network)\/([\w\/\.]+?)(\?(.*?))?(#.*)?$/); URL.Host = URLArr[1]; //protocol + hostname, eg. https://orpheus.network URL.Path = URLArr[2]; URL.Hash = URLArr[5]; URL.Parameters = new Object(); if (typeof URLArr[4] != 'undefined') { var URLPArr = URLArr[4].split('&'); //URL parameter array var tmpP; //temporary Parameter for (var i = 0; i < URLPArr.length; ++i) { tmpP = URLPArr[i].split('='); URL.Parameters[tmpP[0]] = tmpP[1]; } } } function init() { parseURL(); getCollageID(); torrentCache.GM_read(); // putting the add image on various pages (with an active collage) // $.inArray(URL.Path, ['torrents.php', 'artist.php']) if ((URL.Path == 'torrents.php' || URL.Path == 'artist.php' || URL.Path == 'bookmarks.php' || URL.Path == 'collages.php') && (collageID != 0)) { if (URL.Path == 'torrents.php' && URL.Parameters['id']) { //torrent group page var title = document.getElementById('content').getElementsByTagName('h2')[0]; title.insertBefore(document.createTextNode(' '), null); title.insertBefore(createAddIcon(URL.Host + '/torrents.php?id=' + URL.Parameters['id'], URL.Parameters['id']), null); } else { var tableId = ''; if (URL.Path == 'torrents.php' && (URL.Parameters['type'] || URL.Parameters['action'] == 'notify')) { // user uploaded/snatched/etc and notifications tableId = 'content'; } else if (URL.Path == 'artist.php' || (URL.Path == 'collages.php' && URL.Parameters['id'] && URL.Parameters['id'] != collageID)) { // artist page; other collages tableId = 'discog_table'; } else if (URL.Path == 'torrents.php' || URL.Path == 'bookmarks.php') { // search page; bookmarks tableId = 'torrent_table'; } if (tableId != '') { var linkArr = extractTorrentgroupLinks(tableId); for (var i = 0; i < linkArr.length; ++i) { linkArr[i].parentNode.insertBefore(document.createTextNode(' '), linkArr[i].parentNode.firstChild); linkArr[i].parentNode.insertBefore(createAddIcon(linkArr[i].href, linkArr[i].getAttribute('torrentgroupid')), linkArr[i].parentNode.firstChild); } } } } if (URL.Path == 'collages.php' && URL.Parameters['id'] && !URL.Parameters['action']) { var currentCollURL = URL.Parameters['id']; var cx = document.getElementsByTagName('h2')[0]; if (collageID != 0 && collageID != currentCollURL) { // if there is an active collage & the active collage is different than current page, use name + link cx.parentNode.innerHTML = "\
'); makeitp.insertAdjacentHTML("afterEnd",' \
\')+3); description = description.substring(0, description.search('
')); img.src = ICON_ERR; alert(title+"\n\n"+description); } else { // Remember: inCollage is determined *before* sending the request. When inCollage is true, the torrent now isn't in the collage anymore! if (inCollage) { torrentCache.remove(img.getAttribute('torrentgroupid')); } else { torrentCache.add(img.getAttribute('torrentgroupid')); } torrentCache.GM_save(); updateAddIcon(img); } }, onerror: function(f) { img.src = ICON_ERR; alert('Some unknown error occured. Refresh the page and try again!'); } }); } function manage_remove_click(e) { torrentCache.remove(e.target.getAttribute('torrentgroupid')); torrentCache.GM_save(); return true; } //find authkey function findAuthKey() { return unsafeWindow.authkey; } // preference for always showing checkboxes on manage page GM_registerMenuCommand("PTH.ME :: Collage Building Helper - MathRange checkboxes", function() { var checkBoxQuestion; for (var zz = 1; zz <= 3 && isNaN(checkBoxQuestion); ++zz) { checkBoxQuestion = prompt("Do you want the checkboxes to always appear on the manage collage page?\nType \"1\" for yes and \"0\" for no.\nCurrent selection is: " + GM_getValue("checkBoxAlwaysOn", "0") + " (0 is default)"); if (checkBoxQuestion != null && checkBoxQuestion != '') { checkBoxQuestion = parseInt(checkBoxQuestion); if (isNaN(checkBoxQuestion)) { if (zz==3) { alert("Try harder! Better luck next time!"); } else { alert("Please pick \"1\" or \"0\" (no quotes)"); } } else if (checkBoxQuestion == 0 || checkBoxQuestion == 1) { GM_setValue("checkBoxAlwaysOn", checkBoxQuestion); } else { alert("Please pick \"1\" or \"0\" (no quotes)"); } } } }); init();