您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Better forks.
当前为
// ==UserScript== // @name GitHub Forks Enhancement // @version 1.0 // @description Better forks. // @author J.H // @match *://github.com/*/network/members // @icon https://github.githubassets.com/favicons/favicon-dark.png // @grant GM_getResourceText // @grant GM_addStyle // @grant GM_xmlhttpRequest // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-footable/3.1.6/footable.min.js // @resource CSS1 https://cdnjs.cloudflare.com/ajax/libs/jquery-footable/3.1.6/footable.bootstrap.min.css // @ressource CSS2 https://cdnjs.cloudflare.com/ajax/libs/jquery-footable/3.1.6/footable.core.bootstrap.min.css // @run-at document-end // @namespace https://gf.zukizuki.org/users/448067 // ==/UserScript== GM_addStyle(GM_getResourceText("CSS1")); GM_addStyle(GM_getResourceText("CSS2")); GM_addStyle(` @font-face { font-family: "Glyphicons Halflings"; font-style: normal; font-weight: normal; src: local("Glyphicons Halflings"), url("https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.ttf") format("truetype"); } table { border-spacing: 0; border-collapse: separate; background-color: var(--color-bg-primary); border: 1px solid var(--color-border-primary); border-radius: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; border-bottom-right-radius: 6px; border-bottom-left-radius: 6px; margin-bottom: 16px; } table.footable, table.footable-details { border-collapse: separate; } table { background-color: transparent; } caption { padding-top: 8px; padding-bottom: 8px; color: #777; text-align: left; } th { text-align: left; } .table { width: 100%; max-width: 100%; margin-bottom: 20px; } .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { padding: 8px; line-height: 1.42857143; vertical-align: top; border-top: 1px solid var(--color-border-secondary); } .table > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid var(--color-border-secondary); } .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { border-top: 0; } .table > tbody + tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } .table-bordered { border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { border-bottom-width: 2px; } .table-striped > tbody > tr:nth-of-type(odd) { background-color: #f9f9f9; } .table-hover > tbody > tr:hover { background-color: #f5f5f5; } table col[class*="col-"] { position: static; display: table-column; float: none; } table td[class*="col-"], table th[class*="col-"] { position: static; display: table-cell; float: none; } .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { background-color: #f5f5f5; } .table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { background-color: #dff0d8; } .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } .table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { background-color: #d9edf7; } .table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } .table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { background-color: #fcf8e3; } .table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { background-color: #f2dede; } .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } .table-responsive { min-height: .01%; overflow-x: auto; } `); function httpFetch(url, func) { GM_xmlhttpRequest({ method: "GET", url: url, onload: function (response) { func(response); }, }); } function restInit(user, repo) { httpFetch( "https://api.github.com/repos/" + user + "/" + repo, function (resp) { const json1 = JSON.parse(resp.responseText); httpFetch( "https://api.github.com/repos/" + user + "/" + repo + "/forks?sort=newest&per_page=100", function (resp) { const json2 = JSON.parse(resp.responseText); createTable(user, repo, json2, json1); } ); } ); } function createTable(user, repo, rJson, cJson) { var rowsData = []; var ev = {}; ev.repoName = '<img id="1337" src="' + cJson.owner.avatar_url + '&s=48" width="24" height="24" class="avatar rounded-1 avatar-user" title="" style="margin-right: .5rem!important;"><a href="' + cJson.html_url + '">' + cJson.full_name + "</a>"; ev.repoStars = cJson?.stargazers_count ?? -1; ev.repoForks = cJson?.forks_count ?? -1; ev.repoOpenIssue = cJson?.open_issues_count ?? -1; ev.repoSize = cJson?.size ?? -1; ev.repoModified = Number(moment(cJson?.pushed_at ?? "NULL").format("x")); rowsData.push(ev); for (const [k, v] of Object.entries(rJson)) { var ec = {}; ec.repoName = '<img src="' + v.owner.avatar_url + '&s=48" width="24" height="24" class="avatar rounded-1 avatar-user" title="" style="margin-right: .5rem!important;"><a href="' + v.html_url + '">' + v.full_name + "</a>"; ec.repoStars = v?.stargazers_count ?? -1; ec.repoForks = v?.forks_count ?? -1; ec.repoOpenIssue = v?.open_issues_count ?? -1; ec.repoSize = v?.size ?? -1; ec.repoModified = Number(moment(v?.pushed_at ?? "NULL").format("x")); rowsData.push(ec); } jQuery(function ($) { $(".table").footable({ columns: [ { name: "repoName", title: "Repo" }, { name: "repoStars", title: "Stars", breakpoints: "xs", type: "number", }, { name: "repoForks", title: "Forks", breakpoints: "xs", type: "number", }, { name: "repoOpenIssue", title: "Open Issues", breakpoints: "xs", type: "number", }, { name: "repoSize", title: "Size", breakpoints: "xs", type: "number", }, { name: "repoModified", title: "Modified", type: "date", breakpoints: "xs sm md", formatter: function (value) { return moment().to(moment(value, "YYYYMMDD")); }, }, ], rows: rowsData, }); }); document.querySelector( 'img[id="1337"]' ).parentElement.parentElement.style.backgroundImage = "linear-gradient(var(--color-alert-warn-bg),var(--color-alert-warn-bg))"; document.querySelector( 'img[id="1337"]' ).parentElement.lastElementChild.style.color = "var(--color-alert-warn-text)"; } var pathComponents = window.location.pathname.split("/"); if (pathComponents.length >= 3) { var user = pathComponents[1], repo = pathComponents[2]; var divForks = document.querySelector('div[id="network"]'); divForks.innerHTML = '<table class="table" data-paging="true" data-sorting="true"></table>'; restInit(user, repo); }