您需要先安装一个扩展,例如 篡改猴、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 4 // @grant none // @inject-into auto // @supportURL https://github.com/whtsky/userscripts/issues // @match https://github.com/* // @namespace https://greatest.deepsurf.us/users/164794 // ==/UserScript== function getSourceGraphUrl() { var pats = [ [ '^/([^/]+)/([^/]+)/tree/([^/]+)$', '/github.com/$1/$2@$3', '^/github.com/([^/]+)/([^/@]+)@([^/]+)$', '/$1/$2/tree/$3', ], [ '^/([^/]+)/([^/]+)/tree/([^/]+)/(.+)$', '/github.com/$1/$2@$3/-/tree/$4', '^/github.com/([^/]+)/([^/@]+)@([^/]+)/-/tree/(.+)$', '/$1/$2/tree/$3/$4', ], ['^/([^/]+)/([^/]+)/blob/([^/]+)/(.+)$', '/github.com/$1/$2@$3/-/blob/$4', '', ''], ['^/([^/]+)/([^/]+)$', '/github.com/$1/$2', '^/github.com/([^/]+)/([^/]+)$', '/$1/$2'], ['^/([^/]+)$', '/$1', '^/([^/]+)$', '/$1'], ] var pathname = window.location.pathname for (var i = 0; i < pats.length; i++) { var pat = pats[i] var r, pathname2 if (window.location.hostname === 'github.com') { if (pat[0] === '') { continue } r = new RegExp(pat[0]) if (pathname.match(r)) { pathname2 = pathname.replace(r, pat[1]) return 'https://sourcegraph.com' + pathname2 } } else { if (pat[2] === '') { continue } r = new RegExp(pat[2]) if (pathname.match(r)) { pathname2 = pathname.replace(r, pat[3]) return 'https://github.com' + pathname2 } } } } function goToSourcegraph(event) { event.preventDefault() const sourceGraphUrl = getSourceGraphUrl() if (sourceGraphUrl) { window.location = sourceGraphUrl } else { alert('Unable to jump to Sourcegraph (no matching URL pattern).') } } function createButton() { if (document.querySelector('#userscript__sourcegraph')) { return } const targetBtn = document.querySelector('#raw-url') || document.querySelector('.file-navigation a.BtnGroup-item') if (targetBtn) { const newBtn = targetBtn.cloneNode(false) newBtn.setAttribute('id', 'userscript__sourcegraph') newBtn.setAttribute('class', 'btn btn-sm BtnGroup-item') newBtn.textContent = 'Sourcegraph' newBtn.href = '' newBtn.addEventListener('click', goToSourcegraph) targetBtn.parentNode.insertBefore(newBtn, targetBtn) targetBtn.parentNode.addEventListener('mouseenter', () => { newBtn.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()