您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a 'Sourcrgraph' Button on GitHub repository & file page.
当前为
// ==UserScript== // @name Add Sourcegraph Button to GitHub // @description Add a 'Sourcrgraph' Button on GitHub repository & file page. // @version 5 // @grant none // @inject-into auto // @supportURL https://github.com/whtsky/userscripts/issues // @match https://github.com/* // @namespace https://greatest.deepsurf.us/users/164794 // ==/UserScript== const pats = [ ['^/([^/]+)/([^/]+)/tree/([^/]+)$', '/github.com/$1/$2@$3'], ['^/([^/]+)/([^/]+)/tree/([^/]+)/(.+)$', '/github.com/$1/$2@$3/-/tree/$4'], ['^/([^/]+)/([^/]+)/blob/([^/]+)/(.+)$', '/github.com/$1/$2@$3/-/blob/$4'], ['^/([^/]+)/([^/]+)/?$', '/github.com/$1/$2'], ['^/([^/]+)/?$', '/$1'], ].map(([reg, replaceValue]) => ({ regexp: new RegExp(reg), replaceValue, })) const buttonID = 'userscript__sourcegraph' function getSourceGraphUrl() { var pathname = window.location.pathname for (const { regexp, replaceValue } of pats) { if (pathname.match(regexp)) { const pathname2 = pathname.replace(regexp, replaceValue) return 'https://sourcegraph.com' + pathname2 } } } /** * @returns {HTMLAnchorElement | null} */ function getCreatedButton() { return document.querySelector(`#${buttonID}`) } function createButton() { if (getCreatedButton()) { return } const targetBtn = document.querySelector('#raw-url') || document.querySelector('.file-navigation a.BtnGroup-item') || document.querySelector('.file-navigation a.d-md-block') if (targetBtn) { /** * @type {HTMLAnchorElement} */ const newBtn = targetBtn.cloneNode(false) newBtn.setAttribute('id', buttonID) newBtn.textContent = 'Sourcegraph' newBtn.href = getSourceGraphUrl() targetBtn.parentNode.insertBefore(newBtn, targetBtn) } } window.addEventListener('popstate', function() { const button = getCreatedButton() if (button) { button.href = getSourceGraphUrl() } }) const observer = new MutationObserver(function() { observer.disconnect() createButton() observer.observe(document.body, { childList: true, subtree: true }) }) observer.observe(document.body, { childList: true, subtree: true }) createButton()