Greasy Fork 支持简体中文。

GitHub Branches Sorter

Allows sorting the branches list of a repository in ways additional to the default, modification time ordering

// ==UserScript==
// @name        GitHub Branches Sorter
// @namespace   Violentmonkey Scripts
// @match       https://github.com/*/*
// @grant       none
// @version     1.0.1
// @license     ISC
// @author      OctoSpacc
// @description Allows sorting the branches list of a repository in ways additional to the default, modification time ordering
// ==/UserScript==

var lastpath = window.location.pathname;

function onBranchesPage(){
  var pathElems = window.location.pathname.split('/').slice(3);
  return (pathElems[0] === 'branches' && pathElems[1]);
}

function main(){
  lastpath = window.location.pathname;
  var tableQuery = 'table.Table__StyledTable-sc-jofqvq-0.gsRldM.Table';

  var orderButtonElem = document.createElement('button');
  orderButtonElem.innerHTML = 'Sort Branches';
  orderButtonElem.onclick = function(){
    var tableElems = document.querySelectorAll(`${tableQuery} > tbody`);
    tableElems[0].style.display = (tableElems[0].style.display ? '' : 'none');
    tableElems[1].style.display = (tableElems[1].style.display ? '' : 'none');
  };

  var tableAlphabElem = document.querySelector(`${tableQuery} > tbody`).cloneNode(false);
  tableAlphabElem.style.display = 'none';

  var alphabRowElems = {};
  for (var branchRowElem of document.querySelectorAll(tableQuery + '> tbody > tr')) {
    var branchName = branchRowElem.querySelector('td > div > a').textContent;
    var branchRowElemNew = branchRowElem.cloneNode(true);
    alphabRowElems[branchName] = branchRowElemNew;
  }

  alphabRowElems = Object.keys(alphabRowElems).sort().reduce(
    function(obj, key) {
      obj[key] = alphabRowElems[key];
      return obj;
    },
  {});

  for (var branchRowElem of Object.values(alphabRowElems)) {
    tableAlphabElem.appendChild(branchRowElem);
  }

  document.querySelector('.Box-sc-g0xbh4-0.lhFvfi').appendChild(orderButtonElem);
  document.querySelector(tableQuery).appendChild(tableAlphabElem);
}

setInterval(function(){
  if (window.location.pathname !== lastpath && onBranchesPage()) {
    window.location.reload();
  }
}, 1000);

if (onBranchesPage()) {
  main();
}