// ==UserScript== // @name gitlab issue TOC // @namespace http://tampermonkey.net/ // @version 1.2 // @description 为 gitlab issue 生成目录(需要自己改下 domain) // @author RobinTsai // @match https://gitlab.com/*/issues/* // @grant none // @require https://code.jquery.com/jquery-latest.js // @downloadURL none // ==/UserScript== // jquery API: http://jquery.cuishifeng.cn/ (function() { 'use strict'; var tocID = "TOC" $("a.toggle-sidebar-button").on("click", function() { setTimeout(function() { var pos = $("a.toggle-sidebar-button").css("width"); console.log("pos:", pos); // $("#TOCofJianShu").css("left", pos); $("#"+tocID).animate({"left": pos}, "slow"); //.slideToggle("slow"); 用于显示和隐藏的缓慢切换 // $(selector).animate({params},speed,callback); }, 255) }); var idx = 0 var hNames = [] var content = $("body,.detail-page-description") var headings = content.find("h1,h2,h3,h4,h5") // 获取 headings 并设置 id var minLevel = 5 // 收集最小的层级 h1 => 1, h2 => 2 var levels = [] for (idx in headings) { if (isNaN(Number(idx))) { continue } var heading = headings[idx] if (heading.classList.length > 0) { continue } heading.id = heading.innerText var level = parseInt(heading.tagName.replace("H", "")) if (levels.indexOf(level) == -1) { levels.push(level) } if (level < minLevel) { minLevel = level } hNames.push({ tagLevel: level, name: heading.innerText, }) } var mapLevelToMarginLeft = {} levels.sort() for (idx in levels) { mapLevelToMarginLeft[levels[idx]] = 20 * idx + "px" } var innerH = [] for (idx in hNames) { var elem = $("", { style: "white-space: nowrap; margin-left: " + mapLevelToMarginLeft[hNames[idx].tagLevel], innerText: hNames[idx].name, text: hNames[idx].name, href: "#"+hNames[idx].name, }) innerH.push( elem ) } var headingWrap = $("
", { id: tocID, style: "\ position: fixed; \ z-index: 1000; \ top: 100px; \ max-height: 400px; \ width: 174px; \ overflow: auto; \ border: solid 1px #826b6b; \ padding: 5px; \ padding-left: 12px; \ left: 220px; \ background-color: #dedede; \ ".replace(/ /g, ""), mouseover: function() { }, mouseout: function() { }, }) // hNames.push(content.find("h1._1RuRku").text()) for (idx in innerH) { innerH[idx].appendTo(headingWrap) $("
").appendTo(headingWrap) } headingWrap.appendTo("body"); })();