// ==UserScript== // @name GotoArXivMirrors // @namespace https://github.com/zzilch/GotoArXivMirrors // @homepage https://github.com/zzilch/GotoArXivMirrors // @version 1.0 // @author zzilch // @description Open arXiv sites with arXiv mirrors // @include /^https?://(.*\.)?arxiv\.org/.*/ // @include http://xxx.itp.ac.cn/* // @run-at document-start // @grant GM_registerMenuCommand // @downloadURL none // ==/UserScript== (function() { 'use strict'; // useful funcitons function incompletePDF(url){ return url.includes('/pdf') && !url.endsWith('pdf') } function abstractURL(url){ return url.includes('/abs') } // available mirrors let mirrors = { 'Main':'arxiv.org', 'China':'xxx.itp.ac.cn', 'Germany':'de.arxiv.org', 'India':'in.arxiv.org', } // Tampermonkey menu items for(let mirror in mirrors){ let url = location.href.replace(location.hostname,mirrors[mirror]).replace('https','http') url = incompletePDF(url) ? url+'.pdf' : url console.log(mirror+':'+url) GM_registerMenuCommand(mirror,()=>location.replace(url)); } // append the filename extension for downloading if(incompletePDF(location.href)) { location.replace(location.href+'.pdf') } // complete pdf url with filename extension after the document is loaded onload = function(){ if(abstractURL(location.href)) { document.querySelector("#abs > div.extra-services > div.full-text > ul > li:nth-child(1) > a").href += '.pdf' } } })();