|
| 1 | +// ==UserScript== |
| 2 | +// @name GitHub in VSCode |
| 3 | +// @version 0.1.0 |
| 4 | +// @description A userscript that adds a button to open a repo in VSCode using github1s |
| 5 | +// @license MIT |
| 6 | +// @author Rob Garrison |
| 7 | +// @namespace https://github.com/Mottie |
| 8 | +// @include https://github.com/* |
| 9 | +// @run-at document-idle |
| 10 | +// @grant none |
| 11 | +// @connect github.com |
| 12 | +// @connect githubusercontent.com |
| 13 | +// @require https://greasyfork.org/scripts/398877-utils-js/code/utilsjs.js?version=895926 |
| 14 | +// @require https://greasyfork.org/scripts/28721-mutations/code/mutations.js?version=882023 |
| 15 | +// @icon https://github.githubassets.com/pinned-octocat.svg |
| 16 | +// @updateURL https://raw.githubusercontent.com/Mottie/GitHub-userscripts/master/github-in-vscode.user.js |
| 17 | +// @downloadURL https://raw.githubusercontent.com/Mottie/GitHub-userscripts/master/github-in-vscode.user.js |
| 18 | +// ==/UserScript== |
| 19 | +/* global $ on make */ |
| 20 | +(() => { |
| 21 | + "use strict"; |
| 22 | + |
| 23 | + // Icon modified from https://commons.wikimedia.org/wiki/File:Visual_Studio_Code_1.35_icon.svg |
| 24 | + const vsCodeIcon = ` |
| 25 | + <svg class="octicon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 256 256" fill="none" aria-hidden="true" style="pointer-events:none"> |
| 26 | + <mask id="a" maskUnits="userSpaceOnUse" x="0" y="0" width="256" height="256"> |
| 27 | + <path fill-rule="evenodd" clip-rule="evenodd" d="M181.534 254.252a15.934 15.934 0 0012.7-.488l52.706-25.361a16.002 16.002 0 009.06-14.42V42.018c0-6.15-3.522-11.754-9.06-14.42L194.234 2.238a15.939 15.939 0 00-18.185 3.097l-100.9 92.052-43.95-33.361a10.655 10.655 0 00-13.614.605L3.49 77.453c-4.648 4.227-4.653 11.54-.011 15.774L41.593 128 3.478 162.773c-4.642 4.235-4.637 11.547.011 15.775l14.097 12.822a10.655 10.655 0 0013.613.606l43.95-33.362 100.9 92.053a15.915 15.915 0 005.485 3.585zm10.505-184.367L115.479 128l76.56 58.115V69.885z" fill="#fff"/> |
| 28 | + </mask> |
| 29 | + <g mask="url(#a)"> |
| 30 | + <path d="M246.94 27.638L194.193 2.241a15.947 15.947 0 00-18.194 3.092L3.324 162.773c-4.645 4.235-4.64 11.547.011 15.775L17.44 191.37a10.667 10.667 0 0013.622.606l207.941-157.75c6.976-5.291 16.996-.316 16.996 8.44v-.612a16 16 0 00-9.059-14.416z" fill="#0065A9"/> |
| 31 | + <g filter="url(#filter0_d)"> |
| 32 | + <path d="M246.94 228.362l-52.747 25.397a15.95 15.95 0 01-18.194-3.092L3.324 93.227c-4.645-4.234-4.64-11.547.011-15.775L17.44 64.63a10.667 10.667 0 0113.622-.605l207.941 157.748c6.976 5.292 16.996.317 16.996-8.44v.613a16.001 16.001 0 01-9.059 14.416z" fill="#007ACC"/> |
| 33 | + </g> |
| 34 | + <g filter="url(#filter1_d)"> |
| 35 | + <path d="M194.196 253.763A15.955 15.955 0 01176 250.667c5.904 5.904 16 1.722 16-6.628V11.961c0-8.35-10.096-12.532-16-6.628a15.955 15.955 0 0118.196-3.097L246.934 27.6A16 16 0 01256 42.017v171.965a16 16 0 01-9.066 14.419l-52.738 25.361z" fill="#1F9CF0"/> |
| 36 | + </g> |
| 37 | + <path fill-rule="evenodd" clip-rule="evenodd" d="M181.378 254.252a15.936 15.936 0 0012.699-.488l52.706-25.362a16 16 0 009.061-14.419V42.018c0-6.15-3.522-11.754-9.06-14.42L194.077 2.238a15.939 15.939 0 00-18.185 3.096l-100.9 92.053-43.95-33.361a10.655 10.655 0 00-13.613.605L3.333 77.452c-4.648 4.228-4.653 11.54-.011 15.775L41.436 128 3.322 162.773c-4.642 4.235-4.637 11.547.011 15.775L17.43 191.37a10.655 10.655 0 0013.614.606l43.95-33.362 100.899 92.053a15.919 15.919 0 005.486 3.585zm10.505-184.367L115.323 128l76.56 58.115V69.885z" fill="url(#paint0_linear)" opacity=".25"/> |
| 38 | + </g> |
| 39 | + <defs> |
| 40 | + <filter id="filter0_d" x="-21.49" y="40.523" width="298.822" height="236.149" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> |
| 41 | + <feFlood flood-opacity="0" result="BackgroundImageFix"/> |
| 42 | + <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/> |
| 43 | + <feOffset/> |
| 44 | + <feGaussianBlur stdDeviation="10.667"/> |
| 45 | + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> |
| 46 | + <feBlend mode="overlay" in2="BackgroundImageFix" result="effect1_dropShadow"/> |
| 47 | + <feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/> |
| 48 | + </filter> |
| 49 | + <filter id="filter1_d" x="154.667" y="-20.674" width="122.667" height="297.347" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> |
| 50 | + <feFlood flood-opacity="0" result="BackgroundImageFix"/> |
| 51 | + <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/> |
| 52 | + <feOffset/> |
| 53 | + <feGaussianBlur stdDeviation="10.667"/> |
| 54 | + <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> |
| 55 | + <feBlend mode="overlay" in2="BackgroundImageFix" result="effect1_dropShadow"/> |
| 56 | + <feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/> |
| 57 | + </filter> |
| 58 | + <linearGradient id="paint0_linear" x1="127.844" y1=".66" x2="127.844" y2="255.34" gradientUnits="userSpaceOnUse"> |
| 59 | + <stop stop-color="#fff"/> |
| 60 | + <stop offset="1" stop-color="#fff" stop-opacity="0"/> |
| 61 | + </linearGradient> |
| 62 | + </defs> |
| 63 | + </svg>`; |
| 64 | + |
| 65 | + const contentWrap = document.createElement("div"); |
| 66 | + contentWrap.className = "ghiv-content"; |
| 67 | + |
| 68 | + function init() { |
| 69 | + const goToFile = $("a[data-hotkey='t']"); |
| 70 | + if (!goToFile || $(".ghiv-link")) { |
| 71 | + return; |
| 72 | + } |
| 73 | + |
| 74 | + const margin = goToFile.classList.contains("mr-2") ? "mr-2" : "ml-2"; |
| 75 | + const link = make({ |
| 76 | + el: "a", |
| 77 | + className: `ghiv-link btn ${margin} tooltipped tooltipped-n`, |
| 78 | + attrs: { |
| 79 | + href: `https://github1s.com${window.location.pathname}`, |
| 80 | + "aria-label": "Open this repo in VS Code using github1s" |
| 81 | + }, |
| 82 | + html: vsCodeIcon |
| 83 | + }); |
| 84 | + goToFile.before(link); |
| 85 | + } |
| 86 | + |
| 87 | + on(document, "ghmo:container pjax:end", init); |
| 88 | + init(); |
| 89 | +})(); |
0 commit comments