├── icon.png ├── options.PNG ├── manifest.json ├── popup.js ├── background.js ├── LICENSE ├── .gitignore ├── README.md └── popup.html /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jithurjacob/arxiv-url-replacer/HEAD/icon.png -------------------------------------------------------------------------------- /options.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jithurjacob/arxiv-url-replacer/HEAD/options.PNG -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | 4 | "name": "Arxiv URL Replacer", 5 | "description": "This extension allows the user to change the URL of Arxiv links.", 6 | "version": "1.0", 7 | "author": "Jithu R Jacob", 8 | "browser_action": { 9 | "default_icon": "icon.png", 10 | "default_popup": "popup.html" 11 | }, 12 | "permissions": [ 13 | "activeTab", 14 | "storage" 15 | ], 16 | "content_scripts": [ 17 | { 18 | "matches": [""], 19 | "exclude_matches":["https://arxiv.org/*"], 20 | "js": [ "background.js"], 21 | "run_at": "document_end" 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /popup.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | function getSavedOption(action, callback) { 5 | chrome.storage.sync.get(action, value => { 6 | callback(chrome.runtime.lastError ? null : value); 7 | }); 8 | } 9 | 10 | function saveOption(action, value) { 11 | chrome.storage.sync.set({action:value}); 12 | } 13 | 14 | document.addEventListener('DOMContentLoaded', () => { 15 | var dropdown = document.getElementById('dropdown'); 16 | 17 | getSavedOption("action", value => { 18 | if (value) { 19 | dropdown.value = value.action; 20 | } 21 | }); 22 | dropdown.addEventListener('change', () => { 23 | saveOption("action", dropdown.value); 24 | document.getElementById('showMsg').style.display = "block"; 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /background.js: -------------------------------------------------------------------------------- 1 | chrome.storage.sync.get("action", value => { 2 | var val = value["action"]; 3 | if(val == "none"){ 4 | ; 5 | }else if(val == "pdf_to_abstract"){ 6 | var anchorList = document.getElementsByTagName('a'); 7 | for (var i = 0; i < anchorList.length; i ++) { 8 | var href_ = anchorList[i].href; 9 | if(href_.search(/http(s)?:\/\/[www.]?arxiv.org\/pdf\//)>=0) 10 | href_=href_.replace(".pdf",""); 11 | anchorList[i].href = href_.replace("arxiv.org/pdf/", "arxiv.org/abs/"); 12 | } 13 | }else if(val == "abstract_to_pdf"){ 14 | var anchorList = document.getElementsByTagName('a'); 15 | for (var i = 0; i < anchorList.length; i ++) { 16 | var href_ = anchorList[i].href; 17 | if(href_.search(/http(s)?:\/\/[www.]?arxiv.org\/abs\//)>=0) 18 | href_+=".pdf"; 19 | anchorList[i].href = href_.replace("arxiv.org/abs/", "arxiv.org/pdf/"); 20 | } 21 | } 22 | 23 | }); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Jithu R Jacob 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # arxiv-url-replacer 2 | A Chrome extension to provide better Arxiv URL's in all pages. This extension allows you to directly go to the PDF link or abstract link as per your preference. 3 | 4 | ![alt text](https://raw.githubusercontent.com/jithurjacob/arxiv-url-replacer/master/options.PNG?token=AGxcDL3jv-QYihhaH_LVfyB_l6pf-ADVks5anYg-wA%3D%3D) 5 | 6 | ## Inspiration 7 | https://twitter.com/dennybritz/status/967992041752768512 8 | 9 | ## Installation 10 | 11 | The extension hasn't been published in the chrome marketplace yet. So it has to be loaded as a developer extension. 12 | 1. Download the extension as a .zip by looking for the “Download ZIP” button on the right-hand side of the project page on GitHub. 13 | 2. Now extract/unzip the code somewhere. 14 | 3. Then in Chrome go to Menu (the three lines)->More tools->Extensions. 15 | 4. Click the “Developer mode” checkbox and then click the button labeled “Load unpacked extension…”. 16 | 5. Now navigate to folder in which you extracted the extension with manifest.json 17 | 6. The extension is successfully loaded 18 | 19 | ## Options 20 | 21 | The extension allows you to convert all pdf links to abstract link or all abstract link to pdf links. Please click the extension icon to select your preference. 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /popup.html: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | Arxiv URL Replacer Extension's Popup 10 | 33 | 34 | 40 | 41 | 42 | 43 | 44 |

Replace Arxiv URL's

45 |
46 | Choose an action : 47 | 53 |
54 | Refresh page to see the result 55 | 56 | 57 | 58 | --------------------------------------------------------------------------------