您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
rfc add toc sidebar
// ==UserScript== // @name rfc toc // @namespace http://yurenchen.com/ // @version 0.4 // @description rfc add toc sidebar // @author yurenchen // @match https://tools.ietf.org/html/* // @grant none // ==/UserScript== (function() { 'use strict'; function appendScript(url,cb){ var e=document.createElement('script'); e.src=url; e.onload=cb; document.body.appendChild(e); } function appendCss(url){ var e=document.createElement('link'); e.rel="stylesheet"; e.href=url; document.body.appendChild(e); } function appendTag(tag, prop){ var e=document.createElement(tag); for(var k in prop){ if(typeof(k)=="string" )//&& typeof(prop[k])=="string") e[k]=prop[k]; console.log(k,prop[k]); } document.body.appendChild(e); return e; } //加载资源文件 /* appendCss("http://note.yurenchen.com/usr/themes/chen/zTreeStyle.css"); appendScript("http://note.yurenchen.com/usr/themes/chen/jquery-1.4.4.min.js"); appendScript("http://note.yurenchen.com/usr/themes/chen/jquery.ztree.core-3.5.js"); appendScript("http://note.yurenchen.com/usr/themes/chen/ztree_toc.js"); */ /* appendCss("https://raw.githubusercontent.com/yurenchen000/i5ting_ztree_toc/master/css/zTreeStyle/zTreeStyle.css"); appendScript("https://raw.githubusercontent.com/yurenchen000/i5ting_ztree_toc/master/js/jquery-1.4.4.min.js"); appendScript("https://raw.githubusercontent.com/yurenchen000/i5ting_ztree_toc/master/js/jquery.ztree.core-3.5.js"); appendScript("https://raw.githubusercontent.com/yurenchen000/i5ting_ztree_toc/master/src/ztree_toc.js"); */ /* //cdn remove 'nosniff' and fix 'mime type' from https://raw.githack.com/ appendScript("https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/js/jquery-1.4.4.min.js", load_cb1); function load_cb1(){ appendScript("https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/js/jquery.ztree.core-3.5.js", load_cb2); } function load_cb2(){ appendScript("https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/src/ztree_toc.js", load_cb3); } function load_cb3(){ init_toc(); } appendCss("https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/css/zTreeStyle/zTreeStyle.css"); */ /* var url_jq ='https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/js/jquery-1.4.4.min.js'; var url_ztree='https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/js/jquery.ztree.core-3.5.js'; var url_toc ='https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/src/ztree_toc.js'; var url_css ='https://rawcdn.githack.com/yurenchen000/i5ting_ztree_toc/master/css/zTreeStyle/zTreeStyle.css'; */ //var domain = 'https://rawcdn.githack.com'; //var domain = 'https://cdn.rawgit.com'; var domain = 'https://rawgit.com'; var url_jq = domain+'/yurenchen000/i5ting_ztree_toc/master/js/jquery-1.4.4.min.js'; var url_ztree= domain+'/yurenchen000/i5ting_ztree_toc/master/js/jquery.ztree.core-3.5.js'; var url_toc = domain+'/yurenchen000/i5ting_ztree_toc/master/src/ztree_toc.js'; var url_css = domain+'/yurenchen000/i5ting_ztree_toc/master/css/zTreeStyle/zTreeStyle.css'; //cdn remove 'nosniff' and fix 'mime type' from https://raw.githack.com/ appendScript(url_jq, load_cb1); function load_cb1(){ appendScript(url_ztree, load_cb2); } function load_cb2(){ appendScript(url_toc, load_cb3); } function load_cb3(){ init_toc(); } appendTag('div', {id:'tree',innerHTML:' TOC loading... ', style:'position: fixed; top:0px; right:0px; border:1px solid gray; height:100%;'}); appendCss(url_css); appendTag('style',{innerHTML:'#tree a:hover { text-decoration: underline; color: green;} #tree a {text-decoration: none;} #tree a.curSelectedNode {color: red; text-decoration: underline;}',onload:window.style_load_ok}); function style_load_ok(){ console.log('style_load_ok ...'); } //生成目录树 function init_toc(){ //生成目录树 $('#tree').ztree_toc({ _header_nodes:[{ id:1, pId:0, name:"Table of Content",open:true, url:'#legend', target: "_self" }], debug: false, is_auto_number: false, refresh_scroll_time: 10, scroll_selector: window, documment_selector:'div.content', ztreeStyle: { //width:'262px', overflow: 'auto', 'z-index': 10 } }); //滚动同步, 内容滚动时, TOC 当前章节 滚入视野 window.onscroll=function(){ //var top=document.body.scrollTop||window.scrollTop||window.scrollY||window.pageYoffset; if(typeof debug_offset != 'undefined')document.title=[top, $(window).scrollTop()]; var o=$('#tree .curSelectedNode')[0]; if(o)o.scrollIntoViewIfNeeded(); //console.log('onscroll:'+[top, tree.style.position, $(window).scrollTop()]); }; window.onscroll(); } window.onload=function(){ adjust_spacer_height(); }; window.onresize=function(){ adjust_spacer_height(); }; function adjust_spacer_height(){ var last=$(':header:last')[0]; if(!last)return; var lack_len = document.body.clientHeight- (document.body.offsetHeight - last.offsetTop) + 10; spacer.style.height=lack_len+'px'; } //阻止 TOC 滚动时 body 被滚动 //http://stackoverflow.com/questions/5802467/prevent-scrolling-of-parent-element //http://stackoverflow.com/questions/4326845/how-can-i-determine-the-direction-of-a-jquery-scroll-event var lastScrollTop = 0; tree.onscroll=function(e){ e.stopPropagation(); e.preventDefault(); e.cancelBubble= true; e.returnValue = false; var scrollTop = $(this).scrollTop(); var pad=2; if (scrollTop > lastScrollTop){//down if(tree.scrollTop + tree.offsetHeight + 10 >= tree.scrollHeight) tree.scrollTop=tree.scrollHeight - tree.offsetHeight - pad; } else {//up if(tree.scrollTop <= 10) tree.scrollTop=pad; } lastScrollTop = scrollTop; return false; }; })();