User:Cwek/myTOC.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

//修订自[[User:YFdyh000/head_TOC.js]],还有其他人的用户页(好像有两个人,太久忘了),想仿制百度百科的浮动式目录,不过还挺难看的,凑合着用吧


$().ready(function()
{
	window.myTOC=window.myTOC||{};
	var mt=window.myTOC;
	
	mt.isToSetToc=false;
    mt.isHaveSetToc=mt.isHaveSetToc||false;
    
	if(!mt.isHaveSetToc){
	    var oldid=mw.config.get("wgRevisionId");
	    var pagename=mw.config.get("wgTitle");
	    var fullpagename=mw.config.get("wgPageName");
	    var spacenameid=mw.config.get("wgNamespaceNumber");
	    var action=mw.config.get("wgAction");
	    
	    var rootul=$("<ul>");
		
		var fun_line_parse_body=function(text,ele_span){
			return function(){
				new mw.Api({async:false,cache:true})
				.get({action:"parse","text":text.replace(/\{/g,"%7b").replace(/\}/g,"%7d"),
				      prop:"text",contentmodel:"wikitext",uselang:"user",
				      disablelimitreport:1,"wrapoutputclass": "",
					//maxage:600,servedby:1,curtimestamp:1
				})
	    		.done(function(data2){
	    			ele_span.html(decodeURIComponent($(data2.parse.text["*"]).text()));
	    		});
			};
		};
		var fun_line_parse=function(text,ele_span){
			setTimeout(fun_line_parse_body(text,ele_span),1000);
		};
	    if(spacenameid>=0&&action=="view"){
	        new mw.Api({async:false,})
	        .get({action:"parse"/*,page:fullpagename*/,oldid:oldid,prop:"sections",/*disablelimitreport:1,*/})
	        .done(function(data){
	        	var last_ele;
	            $(data.parse.sections).each(function(_x_,ele){
	                //console.debug(ele);
	                var anchor=ele.anchor;
	                var index=ele.index;
	                var toclevel=ele.toclevel;
	                var line=ele.line;
	                var number=ele.number;
	                var level=ele.level;
	
	                var workul=rootul;
	                for(var l=1;l<level-1;l++){
	                    var last_li=workul.children("li:last-child");                    
	                    var t_ul=last_li.children("ul");
	                    if(t_ul.length==1){
	                        workul=t_ul;
	                    }
	                    else{
	                        workul=($("<ul>").appendTo(last_li));                        
	                    }
	                }
	              
	               var ele_toctext=$("<span>").addClass("toctext");
	        		$("<li>").addClass("toclevel-"+toclevel).addClass("tocsection-"+index).append(
	                    $("<a>").attr("href","#"+anchor)
	                    .append($("<span>").addClass("tocnumber").text(number))
	                    .append(ele_toctext)
	                ).appendTo(workul);
	        		fun_line_parse(line,ele_toctext);
	        		last_ele=ele;
	            });
	        });
	        mt.isToSetToc=true;
	    }
	    if(action=="view"&&($("div#toc.toc").length==1&&
	        -1!=fullpagename.indexOf("Special:网络书源")))
	    {
	        $("div#toc.toc>ul").children().clone().appendTo(rootul);
	        mt.isToSetToc=true;
	    }
		
	    
	    var TOC_div_style_size={};
		if(!mt.isToSetToc)
		{        
	        rootul=$("<span>").attr("style","text-align:center;").text("目录不存在");		
		}	
		else
		{
	        TOC_div_style_size={width:"165px",height:"500px"};
		}
	
		var TOC_div_style=$.extend({display:"none",overflow:"auto",border:"1px solid #99B3FF","background-color":"white"},TOC_div_style_size);
	
		var my_TOC=$("<div>");
		$("body").prepend(my_TOC);
	
		my_TOC
		.css({position:"fixed",top:"20px",left:"0px","z-index":"100",border:"1px solid #99B3FF"})
		.addClass("noprint")	
		.attr("id","my_TOC")
		.append(
			$("<div>")//目录层开关
			.attr("id","my_TOC_switch")
			.css({"text-align":"center",border:"1px solid #DCDCDC"})
			.append(
				$("<a>")			
				.css("font-size","12px")
				.text("目录折叠开关")
	            .click(function(){
	                $('#my_TOC_totalobj').slideToggle();
	            })
			)
		)
		.append(
			$("<div>")//目录块
			.attr("id","my_TOC_totalobj")
			.css({display:"none","background-color":"white"})
			.append(
				$("<div>")//目录块头
				.attr("id","my_TOC_block_head")
				.css("text-align","center")
				.append($("<a>").attr("href","#top").text("回到顶部"))
				.append("·")
				.append($("<a>").attr("href","#footer").text("直至底部"))
				.append($("<br>"))
				.append(
					$("<a>")				
					.text("显示/隐藏目录")
	                .click(function(){
	                    $('#TOC_obj').slideToggle();
	                })
				)
			)
			.append(
				$("<div>")//目录块体
				.attr("id","TOC_obj")
				.css(TOC_div_style)
				.append(
					$("<div>")
					.addClass("toc")
	                .css("display","table")				
					.append(rootul)                                    
				)
			)	
		);	
	}
	mt.isHaveSetToc=true;
});