// ==UserScript== // @name Jianshu.com 简书文章列表 // @namespace https://www.jianshu.com/u/15893823363f // @version 3.5 // @description 辅助简书跳转列表插件,简书的markdown过于简陋,没有目录结构,这里做了个插件辅助。 增加了缓动,修正了因为顶部遮挡导致标签遮挡的问题 //https://cdn.jsdelivr.net/npm/marked/marked.min.js //https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js //https://code.createjs.com/1.0.0/tweenjs.min.js // @author Zszen John // @match https://www.jianshu.com/p/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; let isDebug = 0 let poolLink = []; document.title = ''; setTimeout(function () { let div = $('
'); $('body').append(div); let title = $('

目录

'); div.append(title); title.on('click',(evt)=>{ let target = $('h1.title'); $('body,html').animate({scrollTop: target.offset().top-60}, 'normal', 'swing'); }); let items = $('
    ');//{{item.title}} div.append(items); document.title = beautySub($('h1.title').html(),6); //if(document.title.length>8){ // document.title = document.title.substr(0,8)+'..'; //} // for(let i=1;i<=7;i++){ // $('h'+i).not('.title').not('#title_jianshu').each(function(idx,el){ // $(el).attr('id','h'+i+'_'+idx) // }); // //DLOG('id','h'+i+'_'+idx); // } //let oldIndent = 999; let oldItems = [items]; //DLOG($('h1').not((idx,el)=>{return false})); let maxLen = 20; let tags = ('h1,h2,h3,h4,h5,h6,h7,strong,b').split(','); let list = null; while(tags.length>0){ let tagStr = tags.join(','); list = $(tagStr).not((idx,el)=>{return $(el).attr('class')!=undefined || $(el).attr('id')}) //.not('.title').not('#title_jianshu').not('[align="center"]'); if(list.length<=maxLen){ break; } tags.pop(); } if(!list || list.length==0){ return; } list.each(function(idx,el){ //poolLink.push($(el).html()); let indent = getTagLevel(el); let idName = 'h'+indent+'_'+idx; // let indent = parseInt($(el)[0].tagName[1]); $(el).attr('id',idName) let unit = $('
  1. ');//;font-size:12px //let link = $(''+$(el).html()+''); let lastEl = null; let indentReal = 0; for(let i=oldItems.length-1;i>=0;i--){ lastEl = oldItems[i]; let distance = (oldItems.length-1)*6 if(i>0){ let lastIndent = parseInt(lastEl.attr('indent')); //DLOG(i,indent,lastIndent); if(indent<=lastIndent){ oldItems.pop(); continue; }else{ unit.css({'text-indent':distance+'px','font-size':Math.max(15-i*2,11)+'px','font-weight':'100'}) lastEl.append(unit); oldItems.push(unit); } }else{ unit.css({'text-indent':distance+'px','font-size':Math.max(15-i*2,11)+'px','font-weight':'100'}) lastEl.append(unit); oldItems.push(unit); } indentReal = i; break; } //add link let link = $(''+beautySub($(el).html(),6+indentReal*3)+''); unit.append(link); link.on('mouseover',(evt)=>{ evt.currentTarget.style.color = '#0F839E'; evt.currentTarget.style.fontWeight = 600; }); link.on('mouseout',(evt)=>{ evt.currentTarget.style.color = '#333333'; evt.currentTarget.style.fontWeight = 100; }); link.on('click',(evt)=>{ let bt = $(evt.currentTarget); let target = $('#'+bt.attr('focus')); let motionTo = target.offset().top-60; //createjs.Tween.get($(document)).to({alpha:1}, 1000);//.call(handleComplete); $('body,html').animate({scrollTop: motionTo}, 'normal', 'swing'); }); //oldIndent = indent; }); createUnit('评论 :p',items,$('div.article').height()+$('div.article').offset().top+550); $(window).resize(updateWin); updateWin(); updateWin(); //setTimeout(updateWin,500); //showList(); //showList(); // recursivelySelf(1); // DLOG(poolLink); },1000); // function recursivelySelf(level){ // if(level>6)return; // $('h'+level).not('.title').each(function(idx,el){ // poolLink.push($(el).html()); // recursivelySelf(level+1); // }) // } function beautySub(str, len) { var reg = /[\u4e00-\u9fa5]/g, //专业匹配中文 slice = str.substring(0, len), chineseCharNum = (~~(slice.match(reg) && slice.match(reg).length)), realen = slice.length*2 - chineseCharNum; return str.substr(0, realen) + (realen < str.length ? "..." : ""); } function createUnit(content,el, motionTo){ let unit = $('
  2. '); let link = $(''+content+''); unit.append(link); link.on('mouseover',(evt)=>{ evt.currentTarget.style.color = '#0F839E'; evt.currentTarget.style.fontWeight = 600; }); link.on('mouseout',(evt)=>{ evt.currentTarget.style.color = '#333333'; evt.currentTarget.style.fontWeight = 100; }); link.on('click',(evt)=>{ //let bt = $(evt.currentTarget); //let target = $('#'+bt.attr('focus')); // let motionTo = target.offset().top-60; $('body,html').animate({scrollTop: motionTo}, 'normal', 'swing'); }); unit.css({'text-indent':0+'px','font-size':Math.max(15-2*1,11)+'px','font-weight':'100'}) el.append(unit); } function getTagLevel(el){ let indent = 0; if($(el)[0].tagName=='STRONG'){ indent = 6; }else if($(el)[0].tagName=='B'){ indent = 7; }else if($(el)[0].tagName=='DIV'){ indent = 1; }else{ indent = parseInt($(el)[0].tagName[1]); } return indent; } function updateWin(){ let div = $('div#zszen_jianshu'); if($(window).width()<970){ hideList(); div.on('mouseover',showList) div.on('mouseout',hideList) }else{ showList(); div.off('mouseover',showList) div.off('mouseout',hideList) } } function showList(){ //DLOG(document.title); let h = $('div#zszen_jianshu').find('ol#itemList_jianshu').height()+50; $('h4#title_jianshu').css({'text-align':'left',width:'500%'}) $('h4#title_jianshu').children().html(document.title); $('div#zszen_jianshu').css({width:'155px',height:h+'px'}) $('div#zszen_jianshu').find('font#title').css({'font-size':'16px'}) $('div#zszen_jianshu').find('ol#itemList_jianshu').show(); } function hideList(){ $('h4#title_jianshu').children().html('目录'); $('h4#title_jianshu').css({'text-align':'center',width:'100%'}) $('div#zszen_jianshu').css({width:'53px',height:'30px'}) $('div#zszen_jianshu').find('font#title').css({'font-size':'13px'}) $('div#zszen_jianshu').find('ol#itemList_jianshu').hide(); } function DLOG(...args){ if(isDebug) console.log.apply(this,args); } // Your code here... })();