// ==UserScript== // // @name Discogs Scout // @version 1.1 // @namespace https://github.com/Purfview/Discogs-Scout // @description Auto search for music on torrent and other sites. Adds links to Discogs pages from various sites. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUBAAAAifwLExgFkP4NJTYQOFUQTHoRYZ0Kbr4Ol/4UgdMGft8acrIPiecWke4Znv7mtRJQAAAEFUlEQVRIx71US4wMURQ9KlXTHWye8utppJRpI8GiFN3Gt4xu4xcpdPuLpo0hhPaZ7sQnad8ZRIQxxiTiM8GEWOhIRCxEzPhEbIhPJCQiIWFHsLFx33uKNtqsxFm8uq/eeffce+vewn+GMi9Rl5hXbeAvmH/VtnTbsvuuLH59rc1+wH5a7HyzxTz0b7v2p8xcfpMxnbtp9Ou16IAhgfus75TsgdZV9fV15vLSeIc41HzjbMbSQqssu9vqlww5vwtMMBnhxpaq6wfzZOguoiiA9rHFZzdXVFj6ZSagJ6G5BYTJ46BmorHE0lPOWUGoILV4QYpWi7JCWNWYyrMN1Drk1vkV4kR36BjP42YSaBRv0/Aw+Lj6iAWz9cJL+YHmVn7XwLOfCmdz3XTueWzG4NuEYZpVdS4WeuUsCSRTJ7fyEpZCwPdtpzWgEn5PwxfBGAdVDYz1lSF9KGcVbxWoI7wkj6mb6DGMVPYZoWgoP6r7hWojBIyGROoWCRtQ2ii/9FKijbnDQwESEFCobMoOi2r33m6Khiz99G0sqBXBuTLGMQbU+a9OGgglKNGZl+MobzjBG89/RRC69Te4BIn8hKlMb6etdkbshveRSmLNSIahuPzVJkkIc9ucp9JTFXa8KrlX3HkisxzF7W3B3eRJPQ5ajtiMiAS5Ln9Mi9O9wf5KAUdAWGPbLeAhZQVhZ440VxtTVjlU1FI5QKsM0VF1grA7B7VpMH06InQNyrY0y0SV6j0Pfha5ibo7BoYTIepoNSURX7UJ1AjCxhF8KEo1Pf8Ok4gQizmhmrEvM0ngoCQcw2TGenU5+TBr7gzyvO/rWRa86XofIzUKXS29aXhanR+zqKrK1bWsRvZGpZyJ3tSITfMzcx6u9DGylUMz7C1Xm8/R0XlZScpddfHi5QqkdF4oRdvuLIlzo0VOjeyLeQbQ1ivlSreiQ9SktPa73jccfMwfuP2L4EtLc1G7eJS1UjNceic6HlKcbkoNhd+oYoY8mxSmlc/mVs9ZW6V403Ct2oFqLGwWwXdNql8gYQxzo3yWQhebG+5tfb1I/Dti5fCf+TlazhYiTAGisTkmp2IlMlFsKGjC56AANTnhlN6uuHJupSKUvJF2iD0wzGurzFHcDLq2J7snC/8gPUKU9metsVzNpdRPwIbpyXUogM8qI/9GyesN0cZlrgvlbka7hUKkepaJkJZUtofIGNrfWY/f4LejWwq2hzd1+4zfsZnZLkr2yM3QN9pEpwOhxNJzmFVB7udgcMDd34KOmG7lMJ3tghbB3NLFEfyJWW8wiIVD/jA2ngikixAUB0NZ8MDiMB7UtKM4hjAWJIJp4i/wMcbyI1H8XKZChKP4O1SLBTffQifIs+BDozNCigUr0Rmm6ePRKbTWWvxrfAfEou1mueFddwAAAABJRU5ErkJggg== // @license MIT // // @homepage https://github.com/Purfview/Discogs-Scout // @supportURL https://github.com/Purfview/Discogs-Scout/issues // // @compatible firefox // @compatible opera // @compatible chrome // @compatible safari (it doesn't support the sites with logins) // @compatible edge // // @require https://cdn.jsdelivr.net/gh/sizzlemctwizzle/GM_config@43fd0fe4de1166f343883511e53546e87840aeaf/gm_config.js // @require https://code.jquery.com/jquery-3.5.1.min.js // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js // // @include https://www.discogs.com/artist/* // @include https://www.discogs.com/master/* // @include https://www.discogs.com/release/* // // @connect * // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_openInTab // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM.getValue // @grant GM.setValue // @grant GM.openInTab // @grant GM.xmlHttpRequest // @grant GM.registerMenuCommand // @grant GM.notification // // @run-at document-start // @noframes // // @downloadURL none // ==/UserScript== // /*========================= Version History ================================== 1.1 - Added: Bunch of sites. Blue color for requests. Tweaked default rate limit. 1.0 - First usable version. New feature: Support for Release/Master pages. New feature: Three bars for sites: 1st for no-auto-search sites, 2nd for searchable download sites 3rd for searchable other sites/tools. New feature: Auto open the settings if no sites selected. Added: First bunch of sites. Updated: OPS (advanced search is broken, switched to basic). 0.3 - Fixed OPS. Check if there are releases on artist page. 0.2.1 - Added the update links and OPS. 0.1 - Initial alpha test release. ==============================================================================*/ var icon_sites = [ { 'name': 'AllMusic', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABMCAMAAADwSaEZAAAAPFBMVEUAKDkAERgAIS8AGSQkqeD+/v4djr0SZokFOE4LTmqVnJ6tt7tSXmI5RUrs7u7d3+B3gIQSIynL0dQnNDr+weAdAAADeklEQVRYw+2V2ZLbIBBFaRE2Sd7//19Db7qmZGdGmTxMpeaCJGjo081SdvjGqly1aD3u6o3vrfotED96ram2Imr1i6DQyi8olzax8ajUp2XDgNeO0zgBR+1xR9Kb9PEFym7V2jZ2sSmfxk01Wx7c7X15mhlr7/w5G9RealbUFFCAy9UMxhzQGsheyKtoQmMtSjMQEgALgfQlrMbOhrPCryY0n81vtMEAtSiL9YTRh2mWNbJwLNLBxjjLUtOY3rFx3TYUUMYo2SLrQC266aVOTiy60LF4XgDyq+lUVWVHU9kSzbalcMZr7MlMZ3EHqk8LzeMxA6VNbVSe6Cy9bfzn0/IzLUsbieDhN1SQmC7Hz0iXj9TKwFAMvgBYCOFyG5tZbBaDR8+xuZtW2TnKDiCfinVis97AQkX44lh3Chlj4P4hs4YtE1fssOMxLXwEQ8i4teqynLaFP23B9HnYtJ3EnNKis/8B7JrS/FUYWss9bIgI2IEDiDi7+/mG88W0F7CI3hiyueua0tXPt725GswJkT/7SxutWWJvLyld2FRkF8UjcxMcc+D3gJNpMhrZuX8eqWu1iyeOFhIyKztpU6SEZpYszjPD7pEzYwBPb5I0OGoNxoKlalCxh1xjDOfEOkXpil1/gtgBjsgMVt2OJhaOFeM1iZbIw1Fq84AgceHMBhzP7BKr6pJUD+16Yk3gz6XD9AtalNRKdK3JNLtF/1DgwEWChC0aoLxroN0ddnaL/tVFOBhOYA7eguifsHqe0qbrE6tgeeo/GQx8t2ajUaQFsEvvGiuTulk1hThq0nf2ld50hYpcybLOWAs0wJAv0xRGs+79areDBJaVgfmAvVan1e5rF/ZmX6IAFvQRjEomIr2wd7Ktmzm1QnQYRr3SRY+RyG7brXN6PQJzGhBEZ8WyOR7MjLj44hbqmu3ikgy9g72KRFrswq4M87bQ9i5iDP3xigHNK85YpW/fhXY02nyCMIEjsOhmF38WMUxvR/TiKO8Ha4DjheyHDMIGWnJ4aQnwHlGkF3avh6cG1JYZEnkqUtf0UjPp8IsSZGSHwo7vdL6R4wYPhfEX1RVP6Y2u2xRUffQABqsRF6zKdLXT1XF4jZlBSO2R/CqYYFrpjcIYBZotDXrSXW33IXj0lsP2up2xSqwT2b7Qe9hpVj2GCGZc38L+Rj+wH9j/AvsN1ksy9BiB4ZUAAAAASUVORK5CYII=', 'searchUrl': 'https://www.allmusic.com/search/albums/"%release%"', 'bar': 1}, { 'name': 'Amazon', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAkFBMVEUAAAD///8EBQX/qABUVlYbHR3/1ZCTlJT7+/vMzMzz8/P/8Nj/v1AwMTHZ2dn/rRN2dnb/6suioqIDBAT+pwD/+vL/9eW+vr6wsbH/4K7/ynLm5uaFhob/w2H/5bz/5Lv/yXL/uD7/9ebNzc2UlZX/0IJmZ2dERUVDRET/sin/rBPl5eX/2p//2Z9lZmZDRUXHx2gpAAAAAXRSTlMAQObYZgAAAclJREFUSMedlul2gjAQhUsm7JuAyqK4tNZq1/d/u0YYExKIob3n8CPH+2XuJEHydJdlENo0bgPjWTPlTfsTl9KCkB/q+mNinOcUE6G4UoiRP0E7Fw1GhOS3iao3mZA72Kj+gj2uUmI4WJAJ2UrbwwL3eePK911ezddWyNGxkPtxtQDFDAEGNAKn3nDGocsLqoBQwLK7CQ5KBKgCaOXjws4AElaH0nhehU1OCZcZCHBp5gK+Tf4ElJLvogHks4cLU7LNezEC9/x22Q2NQEBQOe60Caj4eTYBGsPCBHwrBuNOU1L0bzFPiPrQAFvpFQvEHm4NPRCbEX5MhPxpIBEO5YTEKsC71MjWAKXiy3GGS6ACattFN22FIc+B/njnIjzd4NIurIcvUE4ZY9NtgikpHqwsy9YcCGvrsbIWbgo5ABGj9WK/t04DkPFI+xQOiOgVwbPoIUzhEbJy0tZK02HT4RFgGdWrKfuOpYE6hKb/u/dwkgZuipxMjl8f0iVAurM+YT34ZGEjrAp7rtGr06mNYNlPw9JHjsUBnvQdhkI3XLtVX6ufUUSEGXWsR5cBT+4wHfiPTjjjKhDuHadhfXxl6qJ5/7mcGG8o6uS/49obpgvEcMsAAAAASUVORK5CYII=', 'searchUrl': 'https://www.amazon.com/s?k=%band%+%release%&i=music-intl-ship&ref=nb_sb_noss', 'bar': 1}, { 'name': 'Bandcamp', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAS1BMVEUAAAAdoMMdoMMdoMMdoMMdoMMdoMMdocQdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMMdoMO469wmAAAAGHRSTlMAA/xhZVUSCM/D8uba2K6bkodyW0xDMiMrDxECAAAAnUlEQVQ4y82SOQ7FIAwFCUuA7Ht8/5N+S4ls6fOaKE2moRgxkg3mW1SQJ4HgXYFfRZuNLP1jadJCIltAXS0BBwNe7seebOlTlMACA4HNRd0S8FlHmMsAs7O5/NmgwHB7PkYUsIcEDqRp1MCAAs0pgR2OOLO5ySjQ6pIDDCwSiAktuY/yCh4GnC65Q8+cjTDBJW86woo+Wqjef/ZP8QPdwiBy+gWrIwAAAABJRU5ErkJggg==', 'searchUrl': 'https://bandcamp.com/search?q=%band%+%release%', 'bar': 1}, { 'name': 'Beatport', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAGFBMVEUAAAAB/5UB7YsAe0gBoV4ASywAIBMBxHNCtoKSAAABAElEQVQ4y+2SPwvCMBDFC2r3V4XOin9WNYOrFamriHUuqLhai/38Xqo54ZJ0Fuob2sLr7/LuLkEbdNxu0wY7ASZ/+6fsotHuDYGp3+4CuPvtA9nzxtpR7rWXBPfDTKnM9U+HYDxXukSZu+Foh1qlG47wUeqCvxqI8heQRoAbDxMAcUGPcZZtdAs2XA6p6p4GkMgB1PDZTO2iP2Sw6qYjmaMq0VacH3if/MU4ZV3wwm4yW2+ca3ttVivs4BSQbQJ1pE3y02xX9tksb3Jm4nffhejbBEJqTY0VmpkTHNHbkQ0zpR68MWvpvutiImmZiBYuYKmVuKmyvLznUlelTkEL9AK5yTckC7iHmgAAAABJRU5ErkJggg==', 'searchUrl': 'https://www.beatport.com/search?q=%band%+%release%', 'bar': 1}, { 'name': 'Decks', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAilBMVEUAAABVVVVSUlJZWVlXV1dhYWFbW1tfX19dXV0PDw9EREQ1NTUEBAQGBgYcHBwTExNNTU04ODhjY2NPT088PDwpKSkgICAMDAx9fX1wcHBJSUkwMDAmJiYiIiIXFxeSkpKJiYl2dnZLS0tAQEA+Pj4aGhrFxcWkpKSbm5uHh4dpaWnNzc2goKCTk5M0fYJwAAAAAXRSTlMAQObYZgAAAXVJREFUOMtl09eCgyAQBVAYVBDUaOyJpvfd/f/fWye0GOf1XC9FJX7S+lwyzlleDSlZzkryMOTTCCEiVsVfnFQhDjoGooipZPY4Db8DLP8o2Ym1dW58Gli559EXgSAA05HQmftAsNH7qLT7Aheg6r0A2qJAByguIq0vCygtpvvjzpcFFFJSo7JtnLQ1lLIYN30XousAbch5cmj1cYbg/nP77f/WtoCCIhCGQjuJg9shisJH/3AFIEnEeWUvbHxFOIeuN06hJNPWRhPIsva9w6c8WAfAQOYCKTrrmr1ZAANMiNq+s0ahs6PsXEFOciFyE2izO5/8BUdmHSS5CCG2toLu988jXNauABQZ8O6KFK+hGXZZdr2qwDs0JGV4skAWF8pORX2tz5sPL6cnqwiH6QlwvIPC+zPm2bv+pgrLS9e7T/I5e5eJeUmAtvRT7D5rMDz3FXET49HmDDKe/Xrqi2Fr1vclBXgvVUyWk45KlgC5VE1K3PwDpGkX801HuPEAAAAASUVORK5CYII=', 'searchUrl': 'https://www.decks.de/decks/workfloor/search_db.php?such=%band%+%release%&wosuch=all&wassuch=atl&where=', 'bar': 1}, { 'name': 'Deejay', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAAAwMDD///8ZGRkZGRkaGhobGxsrKysvLy8dHR0eHh4fHx8gICAoKCgxMTFeXl5paWn///8YGBgZGRknJycqKir///8YGBj6phobGhibahlyUBmQYxmCWxl7VhlNHk6zAAAAF3RSTlMAfwb07OXdjILTy8K8lXxBOgP58JyQCX9zfsoAAAB5SURBVBjTTY9XEsMgDERXFBuXuKQp2Enuf0xbiMG8H94ugwZBMK/O+YFmZG6sWDIQGi60q95fEPDmmseCZ5K4fWOSoBPi5yQ1I6wcmxQ/MQ9Xir+Yw1CesNAh6NB9zz/BfOcaA1Cdg2zWXrnXXcnmPCGz0Nj4flrFDxy7ERm/Z/oDAAAAAElFTkSuQmCC', 'searchUrl': 'https://www.deejay.de/%band%+%release%', 'bar': 1}, { 'name': 'Genius', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaBAMAAADKhlwxAAAAGFBMVEX//2QAAABnZyjPz1ExMRORkTjj41mxsUXipzHLAAABcUlEQVRYw+2VPXKDMBCFscG45RFs2nCDMOQAdnIBSC5gN67x/ZtMBsFjpBWSxq1etSN9WvZPIomKinpVedd1H8p+PG4OugFQTOYegDq4k+EjVjTNXSHSd40uZ1OkodEzhXcB3hu0onAW6J1BKxuQKmLQ53mjt4RNmmm2KMzWAGCRs3+7mkMsLUnWqyQutC1JXmR6lGg60U4WIl0zLCfN1atG1wbN7qWNnkMl0ovn6Sh3NuhhonsHXdIkIdKHqSRLIxlryxZTS0k46Ry3XqYZCjckeiCdPNffVvWh2DJTuUinFjoTI0muxgVkEqOwfJLo53RJDKGyPhzSN6XFVNGmRBdW+iCsDbz9puSw37xQvmB+4jXyUMo3yTsQhOSIU5DrIsQ1Ri/4joCwjwgJBEq9DzwouPKH7YHko9bySdY2f/O/sqjYqNjX7y3Jf7CSowqUY/wyUB4j0uq0x/RTo7vMbpj6BEKamDee48ETSVRU1Lb+ABmoNtvoYv3FAAAAAElFTkSuQmCC', 'searchUrl': 'https://genius.com/search?q=%band%+%release%', 'bar': 1}, { 'name': 'Google', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABMlBMVEUAAABFi///STpP/37/vwX/////////////////////////////////////////6eery///XE7///////9V/4D////////////////////////E2v//wLvw//X/rKTo/+7/UUP/TDvJ/9eJ/6j////+/fz/8/L/4Yj/3n7/1ln/0Ef/xRyjxv//u7VXlv//opv/h37/enD/bF/////A/9H///+1/8hr/5Nl/49c/4j////0+P/o8f//9vX/9+D/997g7P/2//j/0c3/0Mz/siL/xL97rP/0//dkn///mRb/lnL/m5P/lo3/kYj/fiL/c2f/Y1bY/+P/2TNJmv/S/97Q/928/9ev/8VOs/+3/6ee/7iP/61//6F2/5r8/y6P//LC/0pS/5RY/77////////5+/9A6TfbAAAAZHRSTlMA9Oqo++j2myLz+M+XJQn8+uzIxamKh1hVLwv89/X17+vr3L0N/v79/fz8+/n39fTx8O7l2NLSsrCsB/7+/v7+/fn5+fn49/f29fTz8vLx7+3l5OPh4NLOysfGwLm2tbGwpaAOaYKM8gAAAZNJREFUOMt9k9d6wjAMhd3ssiFhlg3d7FKge++99w7v/wq1lGFC+PgvgqMj58hCJoxyXI6IkiRG5HiZuPHLk7rNpOwfkgNRj+7AEw04ti/rLrwK05MihoLZZrhQCDezQXwVk/Z+EeUGZ9PAFFEx/fH76Tw3QP4AXYw6orDOck4u0CWGBh7YzyGterVab9HFuXkWMJHBH79/vasje+Ez3UQm5A/6cwr61YwV3mAdS5E4/dkSLjkuDLqLBDrMCsJJIa2Pwkci9LkgCML+9MgElUCTFmnCvBmZYExBs4hEnwJlzp0Qoq/SuIQKJIyzCIGFXeSto8htqwbVOuanVhxMCEHCOhwTG7UpfPN874jpazWqHxuNKkOrX3jK+46l9w+xBKPV6JFZgYzujaHnvkCv9cHB+rsfeOTjqVjslHj+984oUVLsgWnzDn6eK/bAkIAX1vfUhaE94sitEkTBoc28Mr2Ug8iSMjT2mfZbV9N6pQ6VQU8SG8U75uIggZjHKUsxw5+hOC6vTyFuUgmfCtdf9SVSLPoPxFrAszCo93cAAAAASUVORK5CYII=', 'searchUrl': 'https://www.google.com/search?q="%band%"+"%release%"', 'bar': 1}, { 'name': 'Juno', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAALVBMVEUAAABvpecwgt2r0PRGjeBCi9+ozfE4hd02iOSLtOlhn+k1hN0vgdz///8nftvYoGGGAAAAB3RSTlMA4plb4uJb9GWAzwAAAFhJREFUCNdjYGAwWl6lzAAEjB3bqzsEgIyIciBoAQq0gxgVAgwW5WDQzKBRXl5zvLy8iWF1efnLeeXluxiAAnNvAoXgDLgUXDFcO8JABg+oFQhLGZLAzgAAp7o0US8mEgIAAAAASUVORK5CYII=', 'searchUrl': 'https://www.juno.co.uk/search/?q[all][]=%band%+%release%&hide_forthcoming=0', 'bar': 1}, { 'name': 'Last.fm', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAGFBMVEUAAAC5AAD6+fnDJibSYWHtycn15+fglpbOL1ALAAAAAXRSTlMAQObYZgAAAJtJREFUKM9jYGAURAICMD5CBFNAEA3QT0C4VC0ERKoWQwXMlJSUkgWNlJTUDCECSSrCTqqCQcEiSoVgARElRxBOKhR0gagQVwKpCgxKMYQaKqoKpIuUnZTUipEEnFSEy5TUkLSIAUXNkQwVFgcSgkGBYAHhJBVjN+ckdUMTqApBN6DDCs2UYA4DOxrodNegVJAtAxSEhOMWIzkAAPkjMgYRFB9BAAAAAElFTkSuQmCC', 'searchUrl': 'https://www.last.fm/search?q=%band%+%release%', 'bar': 1}, { 'name': 'MusicBrainz', 'icon': 'data:image/png;base64,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', 'searchUrl': 'https://musicbrainz.org/search?query="%release%"+AND+artist:"%band%"&type=release_group&limit=25&method=advanced', 'bar': 1}, { 'name': 'RYM', 'icon': 'data:image/png;base64,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', 'searchUrl': 'https://rateyourmusic.com/search?searchterm=%band%+%release%', 'bar': 1}, { 'name': 'SoundCloud', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAclBMVEX/IwD/////dgD/dAD/cAD/JgD/NAD/MAD/ZQD/XwD/bQD/KgD/LAD/aQD/KAD/QwD/WQD/PAD/VAD/TwD/SgD/+/r/4dr/+Pb/5dv/59r/2cz/3cr/1Lv/dU//hUv/8ej/2MD/xLX/uYj/o2L/m2L/chQ3aOvQAAAA2ElEQVQ4y83KyXaDMAwF0KdQBhfq4AJlyND5/3+x78gcG9KFN1nkSjqyLOGQcIeDzPfskDG1U3zzICF98JSQPnhOwMuNr+H9/L2ZUd0YhE6/YUZlTGUqpvbZiPrg6P9hgpklRrwfs0IbSDuzxDu3K7yqiSU+VuPpqht0SrqJpRFdO0JPUy8xoqUnHEm2EY1HgvMHzsfuYOHKwdHkJEZ0cYRCvYX4FBloHJeLbsAqi5JZRNs/lAlovLqpmc1/qPdsbZmbN3Jrc5srPkhn5tqRJyAHc9cDnR/BH8VZGrE9ue1uAAAAAElFTkSuQmCC', 'searchUrl': 'https://soundcloud.com/search/albums?q=%band%+%release%', 'bar': 1}, { 'name': 'Wikipedia', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAAGFBMVEUAAAD///8BAQFdXV3n5+csLCyPj4/CwsJBNwprAAAAAXRSTlMAQObYZgAAA39JREFUaN7tmc1ymzAUhds+QVRjs275W0Nm2jUe3Kzx5AVwm+5h2vcvFZa+XDJCxsrCC2uTOYH76d4jISnRB9s+qhXtwUTReLgeQffrCcSHEdRVLSABUiA+hKCubiQQkkI4QAU0EghIIRigglowgAqureEGACqw3QF3wB1wB9wBc8DmkfZ91LufZ/GtUyoy4rEcxW/e7AB8+krLRr23qhjpUtBSC3hYBGytyN8ZUFwI2PgzUJ9HyVuvO22Vio9GPCPGlpUAVNP81b9MmmbSP6b+tYqap//iz1k0B/2kqeU82Nn8p3bUPMXD3D4aRlW+nUhTbp2RJy3rSRx0MaZVo+oBiAheO8DTz0BHpAbAGlfIkr7YEIrbmNcAEAE6OpohmYfsdaIAyMxWTUkZrlErFgDAhE6a0OMablOPAOylizsrY0pjSAFgjnQxMlLbmwqzWwGQEZksKWEQmUYoAVAVVVNSrccjq3nLKAAyopQmlLOiYxQAYUIqS0pn477hFQDABf40STmIe5IEIEzIalnSk3EWau0CDEwlTHg5DyYzPFEuwJaphAnGWKCpExCbuUNJfCD0UboALEOYgK9U2bsBA/0xriJnLAAgTSBFTOhEkYUDgO8pJvB5kFPrAGBCjgm4yi96N4BliA5ll5V56gIcZM2R9QSduwEsQ9KEVDxu3QCWITmuiUiwWwSwDAGQK3VWLwP2RLDflUgscAA2IiI2MxGZegAREZwTEoUsFwD4nmPBVBKyXgAQk722AOcrk4wLgAk9s4KSIkbYAcC3FgvkJl0uAjChsJPiBRP4kpwAJp89V8SYcMICF4C867MFxWTk83lBLi4A0OW0JQ3aBL4kL4Aupy1pY3abrZYeADuaOY2R0cD8cAIwIeNoVelx5UtaBDB9enO0MibEGuMDYEKrf9Rmbmb6R+cFYEIxnSQYlkFb6QOwsiYcrSo9LJXmeQGYwNFq0EDD8wPY1jOxRWqeF4AJrCsxu/yFgD1/72ACX5IPQM69XNlSPwAT6BFgeRmAnAuAJOQHYEIJkIT8AHKuJbBYAYjpEWDrB0gT0pmr/RrAwLzjZLIGsDUBmFD4AdKEfOZquwqgjjIgwoILAcMs4JSpdYBtIvUhXwmIfkkdd44Xb+C/+6GAG7hjCQQE3zMFX5WFAsJv+wJTeIcr07AUgm99wy+uadcWQAuLp4r1+f8DlVKhz9lAdawAAAAASUVORK5CYII=', 'searchUrl': 'https://en.wikipedia.org/w/index.php?search=%band%+%release%&go=Go', 'bar': 1}, { 'name': 'YouTube', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/AAD/////8PD/0ND/wMD/kJD/gID/UFD/QED/ICD/EBBwI9TdAAAACnRSTlMAwECAMBDwsGAgE90AyAAAAHFJREFUOMvVkkkOgCAMRYXKYBEH9P5nVdCoIdImuuJt/1t0+E09KGkBxAMAK9UVtwJfEe2ZayygD8NgEZMEJIh5RwlxUIk3cy7ITHDDwgiun2hhxwdKSIzrP8GHD0MSa7KHYk/NPYt9N1sYrnJcaathA2rBFn/0Nk1kAAAAAElFTkSuQmCC', 'searchUrl': 'https://www.youtube.com/results?search_query=%band%+%release%', 'bar': 1} ]; var public_sites = [ { 'name': 'DW', 'icon': 'data:image/png;base64,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', 'searchUrl': 'https://forum.dirtywarez.com/search/search?keywords=%band%+%release%&title_only=1&nodes[]=103', 'loggedOutRegex': /Cloudflare|Ray ID|You must be logged/, 'matchRegex': /No results found/, 'bar': 2}, { 'name': 'InternetArchive', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoBAMAAAB+0KVeAAAAGFBMVEUBAQH+/v6xsbH5+flycnIkJCTPz8+YmJgcORQtAAAAkElEQVQoz+3RsQrCMBDG8Uuou1+/gGuLfYEjPkAzuToIroq+/zPYq9ZgIE66+YdLwm/MyZc6XoeSThdEcDhkWe0jIqEgbgs7qsKiXWep5xTIrZ8IgoDqNBlJTM2n0rBa2kmDURqOksKCfRCvnXh0sm1f2BrM0/+xihvxLDEF+2Qbe37IoVhxBSsp3nogCvxNd8fgHTocf1QUAAAAAElFTkSuQmCC', 'searchUrl': 'https://archive.org/details/audio_music?query=%band%+%release%', 'loggedOutRegex': /Cloudflare|Ray ID/, 'matchRegex': /No results matched/, 'bar': 2}, { 'name': 'Knaben', 'icon': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAQMAAAD58POIAAAABlBMVEUAAAACAgJ6224PAAAAAXRSTlMAQObYZgAAAm5JREFUSMfF1L2O1DAQB/BERkqHKenMgyD5zc4+XUHJKxnxIu5oXfqkEPOfD0+8i6hxcbf5JfZMZmZ3+/f68gzl6XpfINJnd0McWO3I89oNWtUbBIFgkBhKtCOGQLIjnuEQyGOCF3i9LIjAbhAFHMCiNvxx5w24N67DAEk+Q952QDfALYAHZIFGcAL2IoB/DtA2VwUyQ2gbjBaCKoTOcPIL9lC3KJG7QZLsG79xj3Ufg6EqFIcUCQpDiwWVKgSkgQCFkUQmRNRhQgRkFKY/AMp2LpDeAEsZa+J2rOAJssIAxHdAueElNUC9gXZZIjsDZdZXyMGecAzU9mpQUJ0DYXUHwUluEwLo1C6BpIAm2g4AAmjUQ6Buu0YNE5xGjQJlOzRqmuA16hDIW7g0SEtIEaC9xTwyYK9GxS0Ba4vCvjYOgKhlhReLiuUZNKqBRpVADKM/AhI0cATyrgbbi19gJwi6xSDhUFuApPNjMB4gMVw3RIbxF+Q7j0vATlAo9iYKVcAbtAX2BYJBv+EEWKrR4FrAjV8GSeCn5m7waqny+W5sBp7gwAxY7grRcj8A/tyCAR5uvtPWZp1roVF3uoIDYG4B9xMR2++6o4ux6G+evm9NyCkaxFEH+zAoQ1K2PH5cOjcz97dToMxp+EbgF/je5dA6Jyo0PlvhGFcisM546YBj+GzfQva+twmnFDtUPszWbw6c9Op9Ds283RX2CU0Hz02oNFsrlChFPCbkIGX2en3NzgSFk55d8+qAmVc+ANw7KWDmg6h3F0MTLvIzBdZmZf3BcJ3BkcdKeekc0fZAnz9qt75SjvTh03avD9t/W38ALE8zQ0sutboAAAAASUVORK5CYII=', 'searchUrl': 'https://knaben.eu/search/?cat=Audio&q=%band%+%release%&fast=0', 'loggedOutRegex': /Cloudflare|Ray ID/, 'matchRegex': />Total hits : 0Remember meRemember meRemember meRemember me0 results').attr({'style': '-moz-opacity: 0.4; border: 0', 'width': iconsize, 'height': iconsize, 'src': favicon, 'title': title, 'alt': site['name']}); if (hide_on_err) { img.attr('onerror', "this.style.display='none';"); } return img; } //============================================================================== // Create elements and add search links //============================================================================== function addLink(elem, site_name, target, site, state, scout_tick, post_data) { // State should always be one of the values defined in valid_states. if ($.inArray(state, valid_states) < 0) { console.log("Unknown state: " + state); } var link = $('').attr('href', target).attr('target', '_blank').attr('rel', 'noreferrer'); // Link and add Form element for POST method. if ('mPOST' in site) { var form_name = site['name'] + '-form-' + scout_tick; var placebo_url = new URL(target).origin; link = $('').attr('href', placebo_url).attr('onclick', "$('#" + form_name + "').submit(); return false;").attr('target', '_blank').attr('rel', 'noreferrer'); var data = (post_data.match('{')) ? post_data : '{"' + post_data.replace(/&/g, '","').replace(/=/g, '":"').replace(/\+/g, ' ') + '"}'; var addform = $('
'); addform.attr('id', form_name); addform.attr('action', target); addform.attr('method', 'post'); addform.attr('style', 'display: none;'); addform.attr('target', '_blank'); addform.attr('rel', 'noreferrer'); if (post_data.match('},{')) { const dataArray = (new Function("return [" +data+ "];")()); dataArray.forEach(function (item, index) { let addinput = $(""); addinput.attr('type', 'text'); addinput.attr('name', item.key); addinput.attr('value', item.value); addform.append(addinput); $('body').append(addform); }); } else { data = JSON.parse(data); for (const name in data) { let addinput = $(""); addinput.attr('type', 'text'); addinput.attr('name', name); addinput.attr('value', data[name]); addform.append(addinput); $('body').append(addform); } } } // Icon appearance. let icon; const border_width = GM_config.get('iconsborder_size'); if (GM_config.get('auto_search') && site['bar'] != 1) { icon = getFavicon(site); icon.css({'border-width': border_width, 'border-style': 'solid', 'border-radius': '2px', 'margin': '1px 2px 2px'}); if (state == 'error' || state == 'logged_out') { (GM_config.get('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(255,0,0)') : icon.css('border-color', 'rgb(180,0,0)'); } else if (state == 'missing') { (GM_config.get('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(255,255,0)') : icon.css('border-color', 'rgb(230,200,100)'); } else if (state == 'found') { (GM_config.get('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(0,220,0)') : icon.css('border-color', 'rgb(0,130,0)'); if ((site['name']).match('-Req')) icon.css('border-color', 'rgb(50,50,200)'); } link.append(icon); } else { icon = getFavicon(site); icon.css({'border-width': '0px', 'border-style': 'solid', 'border-radius': '2px', 'margin': '1px 2px 2px'}); (GM_config.get('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(0,220,0)') : icon.css('border-color', 'rgb(0,130,0)'); if ((site['name']).match('-Req')) icon.css('border-color', 'rgb(50,50,200)'); link.append(icon); } // Create elements on Artist pages. if (onArtistPage) { //const bar_height = (parseInt(GM_config.get('mod_icons_size')) +6) +"px"; const background = GM_config.get('greybackground_view') ? 'rgb(51, 51, 51)' : ''; if ($('.result_box_main' + scout_tick).length == 0) { $(elem).after($('').append($('',{'colspan':'9'}).addClass('result_box_main' + scout_tick))); $('.result_box_main' + scout_tick).css({'background-color': background, 'padding': '0px 4px'}); } if (site['bar'] == 1) { if ($('.result_bar_1st' + scout_tick).length == 0) { $('.result_box_main' + scout_tick).append($('
').addClass('result_bar_1st' + scout_tick)); //$('.result_bar_1st' + scout_tick).css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_1st' + scout_tick).append(""+''); }); } } if (site['bar'] == 2) { if ($('.result_bar_2nd' + scout_tick).length == 0) { $('.result_box_main' + scout_tick).append($('
').addClass('result_bar_2nd' + scout_tick)); //$('.result_bar_2nd' + scout_tick).css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_2nd' + scout_tick).append(""+''); }); } } if (site['bar'] == 3) { if ($('.result_bar_3rd' + scout_tick).length == 0) { $('.result_box_main' + scout_tick).append($('
').addClass('result_bar_3rd' + scout_tick)); //$('.result_bar_3rd' + scout_tick).css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_3rd' + scout_tick).append(""+''); }); } } // Add links to elements on Artist pages. if (site['bar'] == 1) { $('#discogscout1_' + state + scout_tick).append(link); } else if (site['bar'] == 2) { $('#discogscout2_' + state + scout_tick).append(link); } else if (site['bar'] == 3) { $('#discogscout3_' + state + scout_tick).append(link); } } // Create elements on Release/Master pages. if (onReleasePage) { //const bar_height = (parseInt(GM_config.get('mod_icons_size')) +6) +"px"; const background = GM_config.get('greybackground_view') ? 'rgb(51, 51, 51)' : ''; if ($('.result_box_main').length == 0) { $(elem).after($('
').addClass('result_box_main')); $('.result_box_main').css({'background-color': background, 'padding': '4px 4px 0px 4px'}); } if (site['bar'] == 1) { if ($('.result_bar_1st').length == 0) { $('.result_box_main').append($('
').addClass('result_bar_1st')); //$('.result_bar_1st').css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_1st').append(""+''); }); } } if (site['bar'] == 2) { if ($('.result_bar_2nd').length == 0) { $('.result_box_main').append($('
').addClass('result_bar_2nd')); //$('.result_bar_2nd').css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_2nd').append(""+''); }); } } if (site['bar'] == 3) { if ($('.result_bar_3rd').length == 0) { $('.result_box_main').append($('
').addClass('result_bar_3rd')); //$('.result_bar_3rd').css({'height': bar_height}); $.each(valid_states, function(i, name) { $('.result_bar_3rd').append(""+''); }); } } // Add links to elements on Release/Master pages. if (site['bar'] == 1) { $('#discogscout1_' + state).append(link); } else if (site['bar'] == 2) { $('#discogscout2_' + state).append(link); } else if (site['bar'] == 3) { $('#discogscout3_' + state).append(link); } } } //============================================================================== // Determine whether a site should be displayed //============================================================================== async function maybeAddLink(elem, site_name, search_url, site, scout_tick, band, release) { // Connection rate limiter per domain. var set_rate = ('rateLimit' in site) ? site['rateLimit'] : 500; var rate = (set_rate > 1000) ? set_rate : set_rate * 4; var domain = search_url.split('/')[2]; var now = (new Date())*1; var lastLoaded = window.localStorage[domain+'_lastLoaded']; if (!lastLoaded) { lastLoaded = now - 50000; } else { lastLoaded = parseInt(lastLoaded); } if (now - lastLoaded < rate) { window.setTimeout(maybeAddLink.bind(undefined, elem, site['name'], search_url, site, scout_tick, band, release), rate); return; } else { window.localStorage[domain+'_lastLoaded'] = (new Date())*1; } var success_match = ('positiveMatch' in site) ? site['positiveMatch'] : false; var target = search_url; if ('goToUrl' in site) { target = await replaceSearchUrlParams({'searchUrl': site['goToUrl'], 'spaceEncode': ('spaceEncode' in site) ? site['spaceEncode'] : '+'}, band, release); } // Check for results with POST method. if ('mPOST' in site) { const post_data = await replaceSearchUrlParams(site, band, release); GM.xmlHttpRequest({ method: 'POST', timeout: parseInt(GM_config.get('timeout_ms')), url: search_url, data: post_data, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, onload: function(response) { if (GM_config.get('debug_sites')) { const name = site['name']; console.log(name + " POST Response Status: " + response.status + "\n "); console.log(name + " POST Response Headers: " + response.responseHeaders + "\n "); console.log(name + " POST Response: " + response.responseText + "\n "); } if (response.responseHeaders.indexOf('efresh: 0; url') > -1 || response.status > 499 || (response.status > 399 && !site.ignore404) || (response.responseText == "" && !site.ignoreEmpty)) { addLink(elem, site_name, target, site, 'logged_out', scout_tick, post_data); } else if (site['positiveMatch'] && site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) { addLink(elem, site_name, target, site, 'logged_out', scout_tick, post_data); } else if (String(response.responseText).match(site['matchRegex']) ? !(success_match) : success_match) { if (!GM_config.get('hide_missing')) { addLink(elem, site_name, target, site, 'missing', scout_tick, post_data); } } else if (site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) { addLink(elem, site_name, target, site, 'logged_out', scout_tick, post_data); } else { addLink(elem, site_name, target, site, 'found', scout_tick, post_data); } }, onerror: function() { addLink(elem, site_name, target, site, 'error', scout_tick, post_data); console.log("Discogs Scout (POST-Request Error. Site): " +site_name); }, onabort: function() { addLink(elem, site_name, target, site, 'error', scout_tick, post_data); console.log("Discogs Scout (POST-Request aborted. Site): " +site_name); }, ontimeout: function() { addLink(elem, site_name, target, site, 'error', scout_tick, post_data); console.log("Discogs Scout (POST-Request timed out. Site): " +site_name); } }); return; } // Request header tweaks let reqHeader = {}; // Check for results with GET method. GM.xmlHttpRequest({ method: 'GET', headers: reqHeader, timeout: parseInt(GM_config.get('timeout_ms')), url: search_url, onload: function(response) { if (GM_config.get('debug_sites')) { const name = site['name']; console.log(name + " GET Response Status: " + response.status + "\n "); console.log(name + " GET Response Headers: " + response.responseHeaders + "\n "); console.log(name + " GET Response: " + response.responseText + "\n "); } if (response.responseHeaders.indexOf('efresh: 0; url') > -1 || response.status > 499 || (response.status > 399 && !site.ignore404) || (response.responseText == "" && !site.ignoreEmpty)) { addLink(elem, site_name, target, site, 'logged_out', scout_tick); } else if (site['positiveMatch'] && site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) { addLink(elem, site_name, target, site, 'logged_out', scout_tick); } else if (String(response.responseText).match(site['matchRegex']) ? !(success_match) : success_match) { if (!GM_config.get('hide_missing')) { addLink(elem, site_name, target, site, 'missing', scout_tick); } } else if (site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) { addLink(elem, site_name, target, site, 'logged_out', scout_tick); } else { addLink(elem, site_name, target, site, 'found', scout_tick); } }, onerror: function() { addLink(elem, site_name, target, site, 'error', scout_tick); console.log("Discogs Scout (GET-Request Error. Site): " +site_name); }, onabort: function() { addLink(elem, site_name, target, site, 'error', scout_tick); console.log("Discogs Scout (GET-Request aborted. Site): " +site_name); }, ontimeout: function() { addLink(elem, site_name, target, site, 'error', scout_tick); console.log("Discogs Scout (GET-Request timed out. Site): " +site_name); } }); } //============================================================================== // Perform code for sites //============================================================================== function perform(elem, band, release, scout_tick) { let site_shown = false; $.each(icon_sites, async function(index, site) { if (site['show']) { site_shown = true; var searchUrl = await replaceSearchUrlParams(site, band, release, true); addLink(elem, site['name'], searchUrl, site, 'found', scout_tick); } }); $.each(sites, async function(index, site) { if (site['show']) { site_shown = true; var searchUrl = await replaceSearchUrlParams(site, band, release, true); if ('goToUrl' in site && GM_config.get('auto_search')) { maybeAddLink(elem, site['name'], searchUrl, site, scout_tick, band, release); } if ('goToUrl' in site && !GM_config.get('auto_search')) { searchUrl = await replaceSearchUrlParams({'searchUrl': site['goToUrl'], 'spaceEncode': ('spaceEncode' in site) ? site['spaceEncode'] : '+'}, band, release); addLink(elem, site['name'], searchUrl, site, 'found', scout_tick); } if (!('goToUrl' in site) && GM_config.get('auto_search')) { maybeAddLink(elem, site['name'], searchUrl, site, scout_tick, band, release); } if (!('goToUrl' in site) && !GM_config.get('auto_search')){ addLink(elem, site['name'], searchUrl, site, 'found', scout_tick); } } }); // Open settings if no sites selected: if (!site_shown) { GM_config.open(); } } //============================================================================== // Artist Page code //============================================================================== function performArtist() { // Check if artist has releases if (!Boolean($('.credit_type:contains("Releases")').text().match('Releases'))) { console.log("Discogs Scout: Artist page doesn't have releases! Quitting...") return; } const band = $('meta[property="og\:title"]').attr('content').replace(/\(\d+\)/, '').trim(); if($('.card').length !== 0) { $('.card').each(function() { const elem = $(this); const release = $(this).find('.title>a').text(); let scout_tick = window.localStorage['_discogscout_tick']; if (!scout_tick) { scout_tick = 1; window.localStorage['_discogscout_tick'] = scout_tick; } perform(elem, band, release, scout_tick); scout_tick = parseInt(scout_tick) + 1; window.localStorage['_discogscout_tick'] = scout_tick; }); } } //============================================================================== // Release Page code //============================================================================== async function performRelease() { const elem = $('[class^=body]'); // This won't work properly if " - " is in band's name: // const title = $('meta[property="og\:title"]').attr('content').trim(); // const band = title.replace(/ - .+/, '').replace(/\(\d+\)/, '').trim(); // const release = title.replace(/.+? - /, '').trim(); let band, release; if (Boolean(location.href.match('/master/'))) { band = $('#profile_title').find('a').text().replace(/\(\d+\)/, '').trim(); release = $('#profile_title').children().last().text().trim(); } else if (Boolean(location.href.match('/release/'))) { band = $('[class^=body]').find('h1>span>a.link_1ctor:first').text().replace(/\(\d+\)/, '').trim(); release = JSON.parse(document.getElementById('release_schema').textContent)['name']; } perform(elem, band, release); } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } //============================================================================// //================================ MAIN ====================================// //============================================================================// //============================================================================== // Settings Menu (GM_config) //============================================================================== // To have consistent spacing in different browsers. var set_cfg_iconsize_spacing = "   "; var timeout_ms_spacing = " "; if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { set_cfg_iconsize_spacing = "  "; timeout_ms_spacing = ""; } var config_fields = { 'aftertitle': { 'section': ' ', 'label': '  ', 'type': 'hidden' }, 'mod_icons_size': { 'label': 'Size of the icons (pixels):    ', 'type': 'text', 'default': '32' }, 'iconsborder_size': { 'label': 'Size of the icons border:     ', 'type': 'select', 'options': ['2px', '3px', '4px', '5px', '6px'], 'default': '3px' }, 'cfg_iconsize': { 'label': 'Size of the settings icons:' + set_cfg_iconsize_spacing, 'type': 'text', 'default': '22' }, 'timeout_ms': { 'label': 'Timeout requests after:      ' + timeout_ms_spacing, 'type': 'select', 'options': ['10000 ms', '20000 ms', '30000 ms', '45000 ms', '60000 ms'], 'default': '30000 ms' }, 'debug_sites': { 'type': 'checkbox', 'label': 'Debug (the searchable sites)?', 'default': false }, 'auto_search': { 'type': 'checkbox', 'label': 'Auto-search sites for results?', 'default': true }, 'hide_missing': { 'type': 'checkbox', 'label': "Hide link if search didn't found results?", 'default': false }, 'greybackground_view': { 'type': 'checkbox', 'label': 'Enable grey background for the links?', 'default': true }, 'run_artistpages': { 'type': 'checkbox', 'label': 'Enable the script on Artist pages?', 'default': false }, 'highlight_sites': { 'label': 'Highlight sites:      ', 'type': 'text', 'default': 'RED,OPS' } }; //============================================================================== // Add sites to Settings (GM_config) //============================================================================== $.each(icon_sites, function(index, site) { config_fields['show_' + site['name']] = { 'section': (index == 0) ? ['Icon sites (no search):'] : '', 'type': 'checkbox', 'label': ' ' + site['name'] }; }); $.each(public_sites, function(index, site) { config_fields['show_' + site['name']] = { 'section': (index == 0) ? ['Public download sites:'] : '', 'type': 'checkbox', 'label': ' ' + site['name'] }; }); $.each(private_sites, function(index, site) { config_fields['show_' + site['name']] = { 'section': (index == 0) ? ['Private download sites:'] : '', 'type': 'checkbox', 'label': ' ' + site['name'] }; }); $.each(other_sites, function(index, site) { config_fields['show_' + site['name']] = { 'section': (index == 0) ? ['Other sites/tools:'] : '', 'type': 'checkbox', 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '') }; }); //============================================================================== // Initialize and register GM_config //============================================================================== GM_config.init({ 'id': 'discogs_scout', 'title': 'Discogs Scout Settings', 'fields': config_fields, 'css': `#discogs_scout_section_header_1, #discogs_scout_section_header_2, #discogs_scout_section_header_3, \ #discogs_scout_section_header_4 { \ background: #00ab00 !important; \ color: black !important; \ font-weight: bold !important; \ border: 0px !important; \ padding-left: 0px !important; \ text-align: middle !important;}\ .field_label { \ display: flex !important; \ align-items: center !important; \ font-weight: normal !important;}\ .config_var { \ margin-top: 2px !important; \ margin-bottom: 2px !important; \ display: flex !important; \ align-items: center !important;}\ #discogs_scout_aftertitle_var { \ margin-top: 0px !important; \ margin-bottom: 0px !important;}\ input { \ margin-top: 0px !important; \ margin-bottom: 0px !important;}\ .grey_link { \ margin-left: 4px !important;}\ #discogs_scout_section_header_0 { \ font-weight: bold !important; \ border: 0px !important; \ margin-top: 0px !important; \ background: #bfbfbf !important;}\ #discogs_scout_header { \ background: black !important; \ color: white !important;}\ #discogs_scout_section_0 { \ margin-top: 0px !important;}`, 'events': { 'open': function() { // Iframe position. this.frame.style.top = '50px'; this.frame.style.left = 'auto'; this.frame.style.right = '150px'; this.frame.style.height = '90%'; this.frame.style.width = '450px'; $('#discogs_scout').contents().find('input#discogs_scout_field_mod_icons_size').attr('size', '1'); $('#discogs_scout').contents().find('input#discogs_scout_field_cfg_iconsize').attr('size', '1'); const modVersion = 'Discogs Scout v' + GM.info.script.version; const modUrl = 'https://greasyfork.org/en/scripts/439452-discogs-scout'; $('#discogs_scout').contents().find('#discogs_scout_section_header_0').append($(''+modVersion+'')); $('#discogs_scout').contents().find('#discogs_scout_section_header_0').find('a').css({ 'text-decoration': 'none', 'color': '#cb0000' }); $('#discogs_scout').contents().find('#discogs_scout_section_1').find('.field_label').each(function(index, label) { var url = new URL(icon_sites[index].searchUrl); $(label).append(' ' + '' + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + ''); $(label).prepend(getFavicon(icon_sites[index], true)); }); $('#discogs_scout').contents().find('#discogs_scout_section_2').find('.field_label').each(function(index, label) { var url = new URL(public_sites[index].searchUrl); $(label).append(' ' + '' + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + ''); $(label).prepend(getFavicon(public_sites[index], true)); }); $('#discogs_scout').contents().find('#discogs_scout_section_3').find('.field_label').each(function(index, label) { var url = new URL(private_sites[index].searchUrl); $(label).append(' ' + '' + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + ''); $(label).prepend(getFavicon(private_sites[index], true)); }); $('#discogs_scout').contents().find('#discogs_scout_section_4').find('.field_label').each(function(index, label) { var url = new URL(other_sites[index].searchUrl); $(label).append(' ' + '' + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + ''); $(label).prepend(getFavicon(other_sites[index], true)); }); $('#discogs_scout').contents().find("img").css({"margin-right": "4px", "width": GM_config.get('cfg_iconsize'), "height": GM_config.get('cfg_iconsize')}); }, 'close': function() { location.reload(); } } }); GM.registerMenuCommand('Discogs Scout Settings', function() {GM_config.open();}); //============================================================================== // Fetch per-site values from GM_config //============================================================================== $.each(icon_sites, function(index, site) { site['show'] = GM_config.get('show_' + site['name']); }); $.each(sites, function(index, site) { site['show'] = GM_config.get('show_' + site['name']); }); //============================================================================== // Global variables //============================================================================== // For internal use (order matters). const valid_states = [ 'found', 'missing', 'logged_out', 'error' ]; // Are we on an artist page? var onArtistPage = Boolean(location.href.match('/artist/')); if (onArtistPage && Boolean(location.href.match('type='))) { if (Boolean(location.href.match('subtype=Videos'))) { onArtistPage = false; } else if (!Boolean(location.href.match('type=Releases'))) { onArtistPage = false; } } // Are we on a release page? var onReleasePage = false; if (!Boolean(location.href.match('/artist/'))) { if (Boolean(location.href.match('/release/')) || Boolean(location.href.match('/master/'))) { onReleasePage = true; } } //============================================================================== // Stuff for /release/ pages (to start after reflow) //============================================================================== function startObserver() { if ($('[class^=body]').length) { addDummyElem(); const obscfg = {childList: true}; const obs = new MutationObserver(checkDummyElem); obs.observe($('[class^=body]')[0], obscfg); } else { console.log("Discogs Scout (Start Error): Element not found! Please report it."); } } function addDummyElem() { const temp = $('').attr('id','temp_scout').css({'display':'none'}); $('[class^=body]').append(temp); setTimeout(function(){ temp.remove(); }, 2000); } function checkDummyElem(mutation, observer) { if (!$('#temp_scout').length) { observer.disconnect(); startDiscogsScout(); } } //============================================================================== // Start: Add links to sites //============================================================================== function startDiscogsScout() { if (onArtistPage && GM_config.get('run_artistpages')) { console.log("Discogs Scout: Starting an artist page.") performArtist(); } else if (onReleasePage) { console.log("Discogs Scout: Starting a release page.") performRelease(); } } if (Boolean(location.href.match('/release/'))) { document.addEventListener('DOMContentLoaded', startObserver); } else { document.addEventListener('DOMContentLoaded', startDiscogsScout); }