Github - Open with VSCode

Adds "Open with VSCode" button

  1. // ==UserScript==
  2. // @name Github - Open with VSCode
  3. // @namespace V@no
  4. // @description Adds "Open with VSCode" button
  5. // @match https://github.com/*
  6. // @version 24.5.9-085044
  7. // @license MIT
  8. // @run-at document-end
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (() =>
  13. {
  14. "use strict";
  15. const fixLink = () =>
  16. {
  17. const elUL = document.querySelector(`#__primerPortalRoot__ > div > div > div > ul > div > ul`);
  18. if (!elUL)
  19. return true;
  20.  
  21. const elLiVStudio = elUL.querySelector(`[id]:nth-child(2)`);
  22. if (elLiVStudio && !elLiVStudio.querySelector(".icon"))
  23. {
  24. const elImg_Vstudio = document.createElement("img");
  25. elImg_Vstudio.classList.add("mr-2", "icon");
  26. elImg_Vstudio.src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vstudio.svg";
  27. elLiVStudio.prepend(elImg_Vstudio);
  28. }
  29. const elLi_DownloadZip = elUL.querySelector(`li:last-child`);
  30. const elLi_VSCode = (elUL.querySelector(".vscode") || elLi_DownloadZip.cloneNode(true));
  31. if (!elLi_VSCode.parentNode)
  32. {
  33. elLi_VSCode.classList.add("vscode");
  34. const elA_VSCode = elLi_VSCode.querySelector("a");
  35. elA_VSCode.textContent = "Open with VSCode";
  36. const elImg_Vscode = document.createElement("img");
  37. elImg_Vscode.classList.add("mr-2", "icon");
  38. elImg_Vscode.src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg";
  39. elA_VSCode.prepend(elImg_Vscode);
  40.  
  41. const cloneURL = (elUL.parentNode.querySelector(`input`) || {}).value
  42. || location.origin + location.pathname + ".git";
  43. elA_VSCode.href = "vscode://vscode.git/clone?url=" + encodeURI(cloneURL);
  44.  
  45. elLi_DownloadZip.parentNode.insertBefore(elLi_VSCode, elLi_DownloadZip);
  46. }
  47. };
  48.  
  49. const observer = new MutationObserver(fixLink);
  50. fixLink();
  51. observer.observe(document, {childList: true, subtree: true});
  52. })();