您需要先安装一个扩展,例如 篡改猴、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://greasyfork.org/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()