GitHub Pulse Sort By

adds sorting option to repo pulse as well as assignee of issues

当前为 2016-01-23 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name GitHub Pulse Sort By
  3. // @namespace faleij
  4. // @description adds sorting option to repo pulse as well as assignee of issues
  5. // @include https://github.com/*/*/pulse
  6. // @version 1.0.1
  7. // @grant none
  8. // ==/UserScript==
  9. /* jshint esnext:true, node:true, browser:true */
  10. /* globals $ */
  11. 'use strict';
  12.  
  13. function create() {
  14. // Load assignees
  15. $('li>.title').each((index, title) => $.get($(title).attr('href')).then(data => $(title).parent().append($('.assignee', $(data)).parent().css('float', 'right'))));
  16.  
  17. let menu = $(`
  18. <div class="select-menu js-menu-container js-select-menu faleijs-sort-by-menu">
  19. <button class="btn btn-sm select-menu-button js-menu-target" type="button" aria-haspopup="true">
  20. <i>Sort By</i>
  21. </button>
  22.  
  23. <div class="select-menu-modal-holder js-menu-content js-navigation-container" aria-hidden="true">
  24. <div class="select-menu-modal">
  25. <div class="select-menu-header">
  26. <span class="select-menu-title">Sort by</span>
  27. <span class="octicon octicon-remove-close js-menu-close"></span>
  28. </div>
  29.  
  30. <div class="select-menu-list">
  31. <div class="select-menu-item js-navigation-item selected">
  32. <input checked="checked" id="sort_changed" name="sortBy" value="time" type="radio">
  33. <span class="select-menu-item-icon octicon octicon-check"></span>
  34. <div class="select-menu-item-text">
  35. Last Changed
  36. </div>
  37. </div>
  38.  
  39. <div class="select-menu-item js-navigation-item">
  40. <input id="sort_assignee" name="sortBy" value="assignee" type="radio">
  41. <span class="select-menu-item-icon octicon octicon-check"></span>
  42. <div class="select-menu-item-text">
  43. Assignee
  44. </div>
  45. </div>
  46.  
  47. <div class="select-menu-item js-navigation-item">
  48. <input id="sort_created" name="sortBy" value="num" type="radio">
  49. <span class="select-menu-item-icon octicon octicon-check"></span>
  50. <div class="select-menu-item-text">
  51. Created
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. </li>
  59. `).prependTo('.header-with-actions');
  60.  
  61. $('input:radio[name="sortBy"]', menu).change(function () {
  62. let sort = (a,b) => $(`.${this.value}:first`, a).text() > $(`.${this.value}:first`, b).text();
  63.  
  64. if (this.value === 'num') {
  65. sort = (a,b) => parseInt($(`.${this.value}:first`, a).text().substr(1)) > parseInt($(`.${this.value}:first`, b).text().substr(1));
  66. }
  67.  
  68. if (this.value === 'time') {
  69. sort = (a,b) => new Date($(`.${this.value}:first`, a).attr('datetime')) > new Date($(`.${this.value}:first`, b).attr('datetime'));
  70. }
  71.  
  72. return $('.repository-content ul').each((index, ul) => $('li', ul).sort(sort).appendTo(ul));
  73. });
  74. }
  75.  
  76. const target = document.querySelector('#js-repo-pjax-container');
  77.  
  78. const mutationHandler = () => $('.faleijs-sort-by-menu', target).length || create();
  79.  
  80. const observer = new MutationObserver(mutationHandler);
  81.  
  82. observer.observe(target, { childList: true, subtree: true });
  83.  
  84. mutationHandler();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址