Adds "Open with VSCode" button
当前为
// ==UserScript==
// @name Github - Open with VSCode
// @namespace V@no
// @description Adds "Open with VSCode" button
// @match https://github.com/*
// @version 23.10.28-123217
// @license MIT
// @run-at document-end
// @grant none
// ==/UserScript==
(() =>
{
"use strict";
const icon_vscode = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg";
const icon_vstudio = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vstudio.svg";
const fixLink = () =>
{
const elADownloadZip = document.querySelector(`[data-open-app="link"]`);
if (!elADownloadZip)
return true;
const elLiDownloadZip = elADownloadZip.parentNode;
const elAVStudio = document.querySelector('[data-open-app="visual-studio"]');
let elLiVSCode;
let elAVSCode;
if (elAVStudio)
{
const elLiVStudio = elAVStudio.parentNode;
elLiVSCode = elLiVStudio.cloneNode(true);
elAVSCode = elLiVSCode.querySelector("a");
elAVStudio.innerHTML = icon_vstudio + elAVStudio.innerHTML;
}
else
{
elLiVSCode = elLiDownloadZip.cloneNode(true);
elAVSCode = elLiVSCode.querySelector("a");
elAVSCode.dataset.action = "click:get-repo#showDownloadMessage";
}
try
{
const hydroClick = JSON.parse(elAVSCode.dataset.hydroClick);
hydroClick.payload.feature_clicked = "OPEN_WITH_VSCODE";
elAVSCode.dataset.hydroClick = JSON.stringify(hydroClick);
}
catch{}
elAVSCode.innerHTML = icon_vscode + "Open with VSCode";
// display "Launching Visual Studio Code..." message
elAVSCode.dataset.openApp = "vscode";
const cloneURL = (document.querySelector(".input-group > .form-control") || {}).value;
if (cloneURL)
elAVSCode.href = "vscode://vscode.git/clone?url=" + encodeURI(cloneURL);
else
elAVSCode.href = elAVSCode.href.replace("git-client://", "vscode://vscode.git/");
elLiDownloadZip.parentNode.insertBefore(elLiVSCode, elLiDownloadZip);
//we don't need keep observing DOM changes anymore
observer.disconnect();
};
const observer = new MutationObserver(fixLink);
if (fixLink())
observer.observe(document, {childList: true, subtree: true});
})();