您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
An userscript to add "Sourcegraph" button on github.
当前为
- // ==UserScript==
- // @name GitHub Sourcegraph Button
- // @namespace yikai.info
- // @version 1.0.0
- // @description An userscript to add "Sourcegraph" button on github.
- // @author martianyi
- // @match https://github.com/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- var rawUrl = '';
- function replace(){
- var rawBtn = document.querySelector('#raw-url');
- if(rawUrl !== rawBtn.href){
- rawUrl = rawBtn.href;
- createButton(rawBtn);
- }
- }
- function createButton(btn) {
- var newBtn = btn.cloneNode(false);
- newBtn.removeAttribute("id");
- newBtn.setAttribute('class', 'btn btn-sm BtnGroup-item');
- newBtn.textContent = "Sourcegraph";
- newBtn.href = "";
- newBtn.addEventListener('click', goToSourcegraph);
- btn.parentNode.insertBefore(newBtn, btn.nextSibling);
- if (!btn.parentNode.classList.contains("btn-group")) {
- var parent = btn.parentNode,
- group = document.createElement("div");
- group.className = "btn-group";
- while (parent.childNodes.length) {
- group.appendChild(parent.childNodes[0]);
- }
- parent.appendChild(group);
- }
- }
- function goToSourcegraph(event) {
- event.preventDefault();
- 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]);
- window.location = 'https://sourcegraph.com' + pathname2;
- return;
- }
- } else {
- if (pat[2] === '') { continue; }
- r = new RegExp(pat[2]);
- if (pathname.match(r)) {
- pathname2 = pathname.replace(r, pat[3]);
- window.location = 'https://github.com' + pathname2;
- return;
- }
- }
- }
- alert('Unable to jump to Sourcegraph (no matching URL pattern).');
- }
- var container =
- document.querySelector("#js-repo-pjax-container") ||
- document.querySelector("#js-pjax-container");
- if (container) {
- new MutationObserver(function(){
- replace();
- }).observe(container, {childList: true, subtree: true});
- }
- replace();
- })();