GitHub My Issues

Add a contextual link to issues you've contributed to on GitHub

目前为 2023-07-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name GitHub My Issues
  3. // @description Add a contextual link to issues you've contributed to on GitHub
  4. // @author chocolateboy
  5. // @copyright chocolateboy
  6. // @version 2.0.0
  7. // @namespace https://github.com/chocolateboy/userscripts
  8. // @license GPL
  9. // @include https://github.com/
  10. // @include https://github.com/*
  11. // @require https://cdn.jsdelivr.net/npm/cash-dom@8.1.5/dist/cash.min.js
  12. // @grant GM_addStyle
  13. // @run-at document-start
  14. // ==/UserScript==
  15.  
  16. // NOTE This file is generated from src/github-my-issues.user.ts and should not be edited directly.
  17.  
  18. "use strict";
  19. (() => {
  20. // src/github-my-issues.user.ts
  21. // @license GPL
  22. var ID = "my-issues-tab";
  23. var ISSUES_LINK = "a#issues-tab";
  24. var MY_ISSUES = "My Issues";
  25. var REPO = "octolytics-dimension-repository_nwo";
  26. var SELF = "user-login";
  27. var USER = "octolytics-dimension-user_login";
  28. function meta(name, key = "name") {
  29. const quotedName = JSON.stringify(name);
  30. return $(`meta[${key}=${quotedName}]`).attr("content");
  31. }
  32. function run() {
  33. $(`#${ID}`).closest("li").remove();
  34. const [self, user, repo] = [meta(SELF), meta(USER), meta(REPO)];
  35. if (!(self && user && repo)) {
  36. return;
  37. }
  38. const $issuesLink = $(ISSUES_LINK);
  39. const $issues = $issuesLink.closest("li");
  40. if ($issues.length !== 1) {
  41. return;
  42. }
  43. const myIssues = `involves:${self}`;
  44. const subqueries = [myIssues, "sort:updated-desc"];
  45. if (user === self) {
  46. subqueries.unshift("is:open", "archived:false");
  47. }
  48. const query = subqueries.join("+");
  49. const path = `/${repo}/issues`;
  50. const href = `${path}?q=${escape(query)}`;
  51. const $myIssues = $issues.clone();
  52. const $link = $myIssues.find(`:scope ${ISSUES_LINK}`).removeClass("selected").removeClass("deselected").attr({
  53. id: ID,
  54. role: "tab",
  55. href,
  56. "aria-current": null,
  57. "data-hotkey": "g I",
  58. "data-selected-links": null
  59. });
  60. $link.find(':scope [data-content="Issues"]').text(MY_ISSUES);
  61. $link.find(':scope [id="issues-repo-tab-count"]').remove();
  62. let q = null;
  63. if (location.pathname === path) {
  64. const params = new URLSearchParams(location.search);
  65. q = params.get("q");
  66. }
  67. if (q && q.trim().split(/\s+/).includes(myIssues)) {
  68. $link.attr("aria-selected", "true");
  69. $issuesLink.addClass("deselected");
  70. } else {
  71. $link.attr("aria-selected", "false");
  72. $issuesLink.removeClass("deselected");
  73. }
  74. $issues.after($myIssues);
  75. }
  76. GM_addStyle(`
  77. .deselected::after {
  78. background: transparent !important;
  79. }
  80. `);
  81. $(document).on("turbo:load", run);
  82. })();