csdn.net CSDN博客目录列表

辅助CSDN跳转列表插件

2019/05/12のページです。最新版はこちら

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
  1. // ==UserScript==
  2. // @name csdn.net CSDN博客目录列表
  3. // @namespace https://www.jianshu.com/u/15893823363f
  4. // @version 3.1
  5. // @description 辅助CSDN跳转列表插件
  6. //https://cdn.jsdelivr.net/npm/marked/marked.min.js
  7. //https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js
  8. //https://code.createjs.com/1.0.0/tweenjs.min.js
  9. // @author Zszen John
  10. // @match https://blog.csdn.net/*/article/details/*
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16. $("div#asideProfile").hide();
  17. $("aside").hide();
  18. $(".csdn-tracking-statistics").hide();
  19. $("a.article-footer-btn").click()
  20. let isDebug = 1
  21. let poolLink = [];
  22. document.title = '';
  23. setTimeout(function () {
  24. let div = $('<div id="zszen_jianshu" class="CSDN列表" style="border-radius:5px;font-size:13;line-height:17px;overflow:hidden; position:fixed; left:10%; top:9%; z-index:9999;height: 25px; width: 53px;border:3px solid #00CBA0;background-color:#ffffff"></div>');
  25. $('body').append(div);
  26. let title = $('<h4 id="title_jianshu" style="text-align:left;width:500%;line-height:13px;margin-bottom:2px;margin-top:2pxpx;line-height:1;padding-left:2px;padding-top:0px;-webkit-margin-before:.3em;-webkit-margin-after:.3em;-webkit-margin-start: 0px;-webkit-margin-end: 0px;font-weight: bold;"><font id="title" style="font-weight:800;color:#00CBA0;font-size:13px">目录</font></h4>');
  27. div.append(title);
  28. let items = $('<ol id="itemList_jianshu" style="width:300%;align:left;line-height:16px;text-align:left;padding-left:7px;padding-top:0px;color:#8B8E85"/>');//<font style="font-size:12px;color:#68ac10">{{item.title}}</font>
  29. div.append(items);
  30. document.title = $('h1.title-article').html();
  31. if(document.title.length>8){
  32. document.title = document.title.substr(0,10)+'..';
  33. }
  34. // for(let i=1;i<=7;i++){
  35. // $('h'+i).not((idx,el)=>{return $(el).attr('class')!=undefined || $(el).attr('id')}).each(function(idx,el){
  36. // $(el).attr('id','h'+i+'_'+idx)
  37. // });
  38. // //DLOG('id','h'+i+'_'+idx);
  39. // }
  40. //let oldIndent = 999;
  41. let oldItems = [items];
  42. //$('h1,h2,h3,h4,h5,h6,h7').not('.title').not('#title_jianshu').
  43. $('div.blog-content-box').find('h1,h2,h3,h4,h5,h6,h7,strong').not((idx,el)=>{return $(el).attr('class')!=undefined || $(el).attr('id')}).each(function(idx,el){
  44. let indent = getTagLevel(el);
  45. let idName = 'h'+indent+'_'+idx;
  46. $(el).attr('id',idName);
  47. DLOG(indent);
  48. let unit = $('<li indent="'+indent+'" style="line-height:18px;align:left"></li>');//;font-size:12px
  49. let link = $('<a focus="'+idName+'">'+$(el).text()+'</a>');
  50. unit.append(link);
  51. //DLOG('>>>',link);
  52. link.on('mouseover',(evt)=>{
  53. DLOG(evt.currentTarget);
  54. evt.currentTarget.style.color = '#00CBA0';
  55. evt.currentTarget.style.fontWeight = 600;
  56. });
  57. link.on('mouseout',(evt)=>{
  58. evt.currentTarget.style.color = '#333333';
  59. evt.currentTarget.style.fontWeight = 100;
  60. });
  61. link.on('click',(evt)=>{
  62. let bt = $(evt.currentTarget);
  63. let target = $('#'+bt.attr('focus'));
  64. let motionTo = target.offset().top-60;
  65. //createjs.Tween.get($(document)).to({alpha:1}, 1000);//.call(handleComplete);
  66. $('body,html').animate({scrollTop: motionTo}, 'normal', 'swing');
  67. });
  68. DLOG(unit.attr('indent'))
  69. let lastEl = null;
  70. for(let i=oldItems.length-1;i>=0;i--){
  71. lastEl = oldItems[i];
  72. let distance = (oldItems.length-1)*6
  73. if(i>0){
  74. let lastIndent = parseInt(lastEl.attr('indent'));
  75. DLOG(i,indent,lastIndent);
  76. if(indent<=lastIndent){
  77. oldItems.pop();
  78. continue;
  79. }else{
  80. unit.css({'text-indent':distance+'px','font-size':Math.max(15-i*2,11)+'px','font-weight':'100'})
  81. lastEl.append(unit);
  82. oldItems.push(unit);
  83. }
  84. }else{
  85. unit.css({'text-indent':distance+'px','font-size':Math.max(15-i*2,11)+'px','font-weight':'100'})
  86. lastEl.append(unit);
  87. oldItems.push(unit);
  88. }
  89. break;
  90. }
  91. //oldIndent = indent;
  92. });
  93.  
  94. //$(window).resize(updateWin);
  95. updateWin();
  96.  
  97. //showList();
  98. //showList();
  99. // recursivelySelf(1);
  100. // DLOG(poolLink);
  101. },1000);
  102.  
  103. // function recursivelySelf(level){
  104. // if(level>6)return;
  105. // $('h'+level).not('.title').each(function(idx,el){
  106. // poolLink.push($(el).html());
  107. // recursivelySelf(level+1);
  108. // })
  109. // }
  110.  
  111. function getTagLevel(el){
  112. let indent = 0;
  113. if($(el)[0].tagName=='STRONG'){
  114. indent = 6;
  115. }else{
  116. indent = parseInt($(el)[0].tagName[1]);
  117. }
  118. return indent;
  119. }
  120.  
  121. function updateWin(){
  122. let div = $('div#zszen_jianshu');
  123. if($(window).width()<0){
  124. hideList();
  125. div.on('mouseover',showList)
  126. div.on('mouseout',hideList)
  127. }else{
  128. showList();
  129. div.off('mouseover',showList)
  130. div.off('mouseout',hideList)
  131. }
  132. }
  133.  
  134. function showList(){
  135. //DLOG(document.title);
  136. let h = $('div#zszen_jianshu').find('ol#itemList_jianshu').height()+$('h4#title_jianshu').height()+30;
  137. $('h4#title_jianshu').css({'text-align':'left',width:'500%'})
  138. $('h4#title_jianshu').children().html(document.title);
  139. $('div#zszen_jianshu').css({width:'155px',height:h+'px'})
  140. $('div#zszen_jianshu').find('font#title').css({'font-size':'16px'})
  141. $('div#zszen_jianshu').find('ol#itemList_jianshu').show();
  142. }
  143.  
  144. function hideList(){
  145. $('h4#title_jianshu').children().html('目录');
  146. $('h4#title_jianshu').css({'text-align':'center',width:'100%'})
  147. $('div#zszen_jianshu').css({width:'53px',height:'30px'})
  148. $('div#zszen_jianshu').find('font#title').css({'font-size':'13px'})
  149. $('div#zszen_jianshu').find('ol#itemList_jianshu').hide();
  150. }
  151.  
  152. function DLOG(...args){
  153. args.unshift('[DEBUG]:')
  154. if(isDebug) console.log.apply(this,args);
  155. }
  156.  
  157. // Your code here...
  158. })();