gitlab

为 gitlab issue 生成目录(需要自己改下 domain)

当前为 2021-11-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name gitlab
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.2
  5. // @description 为 gitlab issue 生成目录(需要自己改下 domain)
  6. // @author RobinTsai
  7. // @match https://gitlab.com/*/issues/*
  8. // @grant none
  9. // @require https://code.jquery.com/jquery-latest.js
  10. // ==/UserScript==
  11.  
  12. // jquery API: http://jquery.cuishifeng.cn/
  13. (function() {
  14. 'use strict';
  15. var tocID = "TOC"
  16. $("a.toggle-sidebar-button").on("click", function() {
  17. setTimeout(function() {
  18. var pos = $("a.toggle-sidebar-button").css("width");
  19. console.log("pos:", pos);
  20. // $("#TOCofJianShu").css("left", pos);
  21. $("#"+tocID).animate({"left": pos}, "slow");
  22. //.slideToggle("slow"); 用于显示和隐藏的缓慢切换
  23. // $(selector).animate({params},speed,callback);
  24. }, 255)
  25. });
  26.  
  27. var idx = 0
  28. var hNames = []
  29. var content = $("body,.detail-page-description")
  30. var headings = content.find("h1,h2,h3,h4,h5")
  31. // 获取 headings 并设置 id
  32. var minLevel = 5 // 收集最小的层级 h1 => 1, h2 => 2
  33. var levels = []
  34. for (idx in headings) {
  35. if (isNaN(Number(idx))) {
  36. continue
  37. }
  38. var heading = headings[idx]
  39. if (heading.classList.length > 0) {
  40. continue
  41. }
  42. heading.id = heading.innerText
  43.  
  44. var level = parseInt(heading.tagName.replace("H", ""))
  45. if (levels.indexOf(level) == -1) {
  46. levels.push(level)
  47. }
  48.  
  49. if (level < minLevel) {
  50. minLevel = level
  51. }
  52. hNames.push({
  53. tagLevel: level,
  54. name: heading.innerText,
  55. })
  56. }
  57.  
  58. var mapLevelToMarginLeft = {}
  59. levels.sort()
  60. for (idx in levels) {
  61. mapLevelToMarginLeft[levels[idx]] = 20 * idx + "px"
  62. }
  63. var innerH = []
  64.  
  65. for (idx in hNames) {
  66. var elem = $("<a>", {
  67. style: "white-space: nowrap; margin-left: " + mapLevelToMarginLeft[hNames[idx].tagLevel],
  68. innerText: hNames[idx].name,
  69. text: hNames[idx].name,
  70. href: "#"+hNames[idx].name,
  71. })
  72. innerH.push( elem )
  73. }
  74.  
  75. var headingWrap = $("<div>", {
  76. id: tocID,
  77. style: "\
  78. position: fixed; \
  79. z-index: 1000; \
  80. top: 100px; \
  81. max-height: 400px; \
  82. width: 174px; \
  83. overflow: auto; \
  84. border: solid 1px #826b6b; \
  85. padding: 5px; \
  86. padding-left: 12px; \
  87. left: 220px; \
  88. background-color: #dedede; \
  89. ".replace(/ /g, ""),
  90. mouseover: function() {
  91. },
  92. mouseout: function() {
  93. },
  94. })
  95. // hNames.push(content.find("h1._1RuRku").text())
  96.  
  97. for (idx in innerH) {
  98. innerH[idx].appendTo(headingWrap)
  99. $("<br>").appendTo(headingWrap)
  100. }
  101. headingWrap.appendTo("body");
  102. })();