GithubHomePageStar

在 Github 首页显示最近的 30 个 star 项目,部分参考自 zhihaofans 的 https://greasyfork.org/zh-CN/scripts/25101

当前为 2017-10-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name GithubHomePageStar
  3. // @description Show the latest 30 starred repos in Github home page.
  4. // @description:zh-CN 在 Github 首页显示最近的 30 个 star 项目,部分参考自 zhihaofans 的 https://greasyfork.org/zh-CN/scripts/25101
  5. // @description:zh-TW 在 Github 首頁顯示最近的 30 個 star 項目,部分參考自 zhihaofans 的 https://greasyfork.org/zh-CN/scripts/25101
  6. // @author ladit
  7. // @version 1.0.2
  8. // @namespace https://greasyfork.org/zh-CN/scripts/33511
  9. // @homepageURL https://github.com/ladit/Userscripts
  10. // @supportURL https://github.com/ladit/Userscripts
  11. // @grant none
  12.  
  13. // @require https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js
  14. // @match https://github.com/
  15. // ==/UserScript==
  16.  
  17. function getStarredList(userName) {
  18. var itemsList = '';
  19. var item = '';
  20. $.getJSON("https://api.github.com/users/" + userName + "/starred", function (starredRepos) {
  21. var starredReposCount = starredRepos.length;
  22. var isPublic = '';
  23. $.each(starredRepos, function (key, starredRepo) {
  24. if (starredRepo.private === true) {
  25. isPublic = "private";
  26. } else {
  27. isPublic = 'public';
  28. }
  29. item = '<li class="' + isPublic + ' source"><a href="/' + starredRepo.full_name + '" class="mini-repo-list-item css-truncate" data-ga-click="Dashboard, click, Popular repos list item - context:user visibility:public fork:false"><svg aria-label="Repository" class="octicon octicon-repo repo-icon" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg><span class="repo-and-owner css-truncate-target"><span class="owner css-truncate-target" title="' + starredRepo.owner.login + '">' + starredRepo.owner.login + '</span>/<span class="repo" title="' + starredRepo.name + '">' + starredRepo.name + '</span></span><span class="stars">' + starredRepo.stargazers_count + ' <svg aria-label="stars" class="octicon octicon-star" height="16" role="img" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg></span></a></li>';
  30. itemsList += item;
  31. });
  32. });
  33. return '<div id="your_stars" class="boxed-group flush js-repos-container" data-pjax-container role="navigation"><div class="boxed-group-action"><a href="/' + userName + '?tab=stars" class="btn btn-sm btn-primary" data-ga-click="Dashboard, click, Sidebar header new repo button - context:user">All stars</a></div><h3>Recent 30 starred repos</h3><div class="boxed-group-inner"><ul class="mini-repo-list">' + itemsList + '</ul></div></div>';
  34. }
  35.  
  36. $(document).ready(function () {
  37. $.ajaxSettings.async = false;
  38. if ($("meta.js-ga-set").attr('content') == "Logged In") {
  39. var userName = $("meta[name='user-login']").attr('content');
  40. if (window.localStorage) {
  41. if (!localStorage.getItem('lastStoreStarredReposTime') || Number(localStorage.getItem('lastStoreStarredReposTime')) + 86400000 < $.now()) {
  42. var starredReposBlock = getStarredList(userName);
  43. localStorage.setItem('starredReposBlock', starredReposBlock);
  44. $(".dashboard-sidebar.column.one-third").append(starredReposBlock);
  45. localStorage.setItem('lastStoreStarredReposTime', $.now());
  46. } else {
  47. $(".dashboard-sidebar.column.one-third").append(localStorage.getItem('starredReposBlock'));
  48. }
  49. } else {
  50. $(".dashboard-sidebar.column.one-third").append(getStarredList(userName));
  51. }
  52. }
  53. $.ajaxSettings.async = true;
  54. });