Greasy Fork 支持简体中文。

GitHub My Issues

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

目前為 2023-07-03 提交的版本,檢視 最新版本

  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.1
  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 MY_ISSUES_LINK = `li a#${ID}`;
  26. var REPO = "octolytics-dimension-repository_nwo";
  27. var SELF = "user-login";
  28. var USER = "octolytics-dimension-user_login";
  29. var meta = (name, key = "name") => {
  30. const quotedName = JSON.stringify(name);
  31. return $(`meta[${key}=${quotedName}]`).attr("content");
  32. };
  33. var run = () => {
  34. $(MY_ISSUES_LINK).closest("li").remove();
  35. const $issuesLink = $(`li ${ISSUES_LINK}`);
  36. const $issues = $issuesLink.closest("li");
  37. if ($issues.length !== 1) {
  38. return;
  39. }
  40. const [self, user, repo] = [meta(SELF), meta(USER), meta(REPO)];
  41. if (!(self && user && repo)) {
  42. return;
  43. }
  44. const myIssues = `involves:${self}`;
  45. const subqueries = [myIssues, "sort:updated-desc"];
  46. if (user === self) {
  47. subqueries.unshift("is:open", "archived:false");
  48. }
  49. const query = subqueries.join("+");
  50. const path = `/${repo}/issues`;
  51. const href = `${path}?q=${escape(query)}`;
  52. const $myIssues = $issues.clone();
  53. const $link = $myIssues.find(`:scope ${ISSUES_LINK}`).removeClass("selected").removeClass("deselected").attr({
  54. id: ID,
  55. role: "tab",
  56. href,
  57. "aria-current": null,
  58. "data-hotkey": "g I",
  59. "data-selected-links": null
  60. });
  61. $link.find(':scope [data-content="Issues"]').text(MY_ISSUES);
  62. $link.find(':scope [id="issues-repo-tab-count"]').remove();
  63. let q = null;
  64. if (location.pathname === path) {
  65. const params = new URLSearchParams(location.search);
  66. q = params.get("q");
  67. }
  68. if (q && q.trim().split(/\s+/).includes(myIssues)) {
  69. $link.attr("aria-selected", "true");
  70. $issuesLink.addClass("deselected");
  71. } else {
  72. $link.attr("aria-selected", "false");
  73. $issuesLink.removeClass("deselected");
  74. }
  75. $issues.after($myIssues);
  76. };
  77. GM_addStyle(`
  78. .deselected::after {
  79. background: transparent !important;
  80. }
  81. `);
  82. $(document).on("turbo:load", run);
  83. })();