跳转到内容

MediaWiki:Common.js

来自猎空书评百科
Admin留言 | 贡献2025年1月26日 (日) 05:30的版本

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
// 用于对CardSelectTr表格进行筛选排序 引用自星穹轨道WIKI
/*
// 筛选按钮表格
*/
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
// 判断是否触摸屏幕,强制设置ua
  if (navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {
    Object.defineProperty(navigator, 'userAgent', {
      value: navigator.userAgent.replace('Macintosh', 'ipadpro'),
      writable: false
    });
  };

$(function() {
	//解决手机上按键选项hover效果不消失的问题
	 
	
	//筛选页面列表筛选
	$('.filter li').on('mouseenter touchstart',function(e) {
		$(this).children().addClass('hover');
	});
	
	$('.filter li').on('mouseleave touchend',function(e) {
		$(this).children().removeClass('hover');
	});
	
	$('.filter li').on('click',function(e) {
		$(this).siblings().children().removeClass('active');
		$(this).children().toggleClass('active');
		var item = new Array();
		$('.filter').find('.active').parent().each(function() {
			var data_type = $(this).parent().attr('data-type');
			item.push("[data-param" + data_type + "='" + $(this).attr("data-value") + "']");
		});
		
		if(item.length != 0) {
			$('#wiki_table tbody').children().hide(400);
			$('#wiki_table tbody').children(item.toString().replace(/,/g, '')).show(300);
			//$('#wiki_table tbody').children().not(item.toString().replace(/,/g, '')).hide(1000);
		} else {
			$('#wiki_table tbody').children().show(300);
		}
	});
});
$(function InitCardSelect() {
	var self = {};
	
	var selectOptions;			//所有筛选按钮
	var filters = {};			//当前筛选规则
	var filterKeys = [];		//所有筛选Key
	var showAll = true;			//不筛选,显示全部
	var tableRows;				//所有要被筛选的行
	var computedRows;			//筛选后的行
	var $sorter;				//当前进行排序的表头
	var sortDesent = false;		//反向排序
	
	function isNil(s) {
		return s === '' || s === undefined || s === null || s === false
	}
	
	//点击筛选按钮时
	function OnSelectOptionClick(e) {
		var $x = e.data;
		e.preventDefault();
		
		var label = '['+$.trim($x.text())+'] 筛选';
		console.time(label);
		
		//显示全部
		if ($x.FilterKey == 0) {
			for (i in selectOptions) {
				selectOptions[i].Select = false;
				selectOptions[i].removeClass('selected');
			}
			filters = {};
			showAll = true;
			
			//更新表格
			self.FilterRows();
			console.timeEnd(label);
			return;
		}
		showAll = false;
		
		var select = !$x.Select;
		$x.Select = select;
		
		//变更筛选状态
		var key = $x.FilterKey;
		filters[key] = filters[key] || {};
		
		var opt = $x.FilterOpt == "AND" ? "AND" : "OR";
		filters[key][opt] = filters[key][opt] || [];
		if (select) {
			filters[key][opt].push($x.FilterValue);
		} else {
			filters[key][opt] = filters[key][opt].filter(function(x) {
				return x !== $x.FilterValue;
			});
			if (filters[key][opt].length < 1) delete filters[key][opt];
		}
		
		
		select ? $x.addClass('selected') : $x.removeClass('selected');
		self.FilterRows();
		console.timeEnd(label);
		
	}
	
	
	function OnHeaderSortClick(e) {
		var $x = e.data;
		e.preventDefault();
		
		var label = '['+$.trim($x.text())+'] 排序';
		console.time(label);
		if ($sorter !== $x) {
			//第一次:新的排序
			$sorter = $x;
			sortDesent = false;
		} else if (!sortDesent) {
			//第二次:切换排序
			sortDesent = true;
		} else {
			//第三次:不进行排序
			$sorter = null;
		}
		
		self.SortRows();
		
		console.timeEnd(label);
	}

	//初始化
	self.Init = function () {
		selectOptions = $('.cardSelectOption').toArray().map(function(x) {
			var $x = $(x);
			
			var dataOption = $.trim($x.data('option'));
			var dataGroup = $.trim($x.data('group'));
			
			if (isNil(dataOption) || isNil(dataGroup)) return $x;
			var splt = dataOption.split('|');
			$x.FilterKey = dataGroup;
			$x.FilterValue = $.trim(splt[1]);
			$x.FilterOpt = $.trim($x.data('opt') || 'OR').toUpperCase();
			
			if (filterKeys.indexOf(dataGroup) < 0)
				filterKeys.push(dataGroup);
			
			$x.click($x, OnSelectOptionClick);
			
			return $x;
		});
		
		//$head = $('#CardSelectTabHeader');
		
		tableRows = $('#CardSelectTr>tbody>tr').toArray().map( function(x) {
			var $x = $(x);
			
			//if (x == $head[0]) continue;
			
			for (i in filterKeys) {
				var key = filterKeys[i];
				var val = $x.data('param'+key);
				if (val === undefined) continue;
				
				if (typeof val == 'number'){
					val = val.toString(10);
				}
				
				var splt = val.split(',');
				for (j in splt) {
					var s = $.trim(splt[j]);
					if (!isNil(s)) {
						$x.FilterData = $x.FilterData || {};
						$x.FilterData[key] = $x.FilterData[key] || [];
						$x.FilterData[key].push(s);
					}
				}
				
			}
			
			return $x;
		});
		
		//computedRows = tableRows.concat([]);
		
		$('#CardSelectTr>thead>tr>th').each(function(index, x) {
			var $x = $(x);
			$x.off('click').off('mousedown');
			
			if ($x.hasClass('headerSort')) {
				$x.Index = index;
				//$x.SortKey = $x.data('group');
				$x.click($x, OnHeaderSortClick);
			}
		});
		
	}
	
	//t1中包含t2中所有项
	function includeAll(t1, t2) {
		for (i in t2) {
			if (t1.indexOf(t2[i]) < 0) return false;
		}
		return true;
	}
	//t1中包含t2中的任一项
	function includeAny(t1, t2) {
		if (t2.length == 0) return true;
		for (i in t2) {
			if (t1.indexOf(t2[i]) > -1) return true;
		}
		return false;
	}
	
	
	//使用show/hide来显示表格行
	self.FilterRows = function() {
		if (showAll) {
			filters = {};
		}
		
		$('#CardSelectTr>tbody').hide();
		
		for (var idx in tableRows) {
			var $x = tableRows[idx];
			var data = $x.FilterData;
			var hide = false;
			
			for (key in filters) {
				hide = !data || !data[key];
				
				if (!hide && filters[key]['AND']) {
					hide = !includeAll(data[key],filters[key]['AND']);
				}
				if (!hide && filters[key]['OR']) {
					hide = !includeAny(data[key],filters[key]['OR']);
				}
				if (hide) break;
			}
			
			if (!hide != !$x.Hide) {
				$x.Hide = hide;
				hide ? $x.hide() : $x.show();
			}
		}
		
		
		$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
		$('#CardSelectTr>tbody').show();
		$sorter = null;
	}
	
	
	function grabSortData($tr, index) {
		$tr.SortData = $tr.SortData || [];
		if ($tr.SortData[index] !== undefined) return $tr.SortData[index];
		
		var td = $tr.children('td')[index];
		if (!td) {
			$tr.SortData[index] = -1;
			return -1;
		}
		
		var text = $.trim(td.textContent);
		$tr.SortData[index] = text;
		return text;
	}
	
	//对行排序,不显示的行会被移除
	self.SortRows = function() {
		
		//var residues = [];
		
		if (!$sorter) {
			computedRows = tableRows.filter(function($x) { return !$x.Hide; });
			$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
		}
		else if (!sortDesent) {
			var index = $sorter.Index;
			computedRows = tableRows.filter(function($x) { return !$x.Hide; });
			computedRows.sort(function compareFunction($x, $y) {
				var x = grabSortData($x, index);
				var y = grabSortData($y, index);
				var nx = + x;
				var ny = + y;
				
				return (isNaN(nx) || isNaN(ny)) 
						? isNaN(nx) && isNaN(ny) 
							? x < y ? -1 : 1
							: isNaN(nx) ? 1 : -1	//字符串排后
						: nx === ny
							? 0
							: nx < ny ? -1 : 1;		//数值小的排前
				//console.log (`${x} ~ ${y} => ${ret}`);
				//return ret;
			});
			$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
			$sorter.addClass('headerSortDown');
			
		}
		else {
			computedRows.reverse();
			$('#CardSelectTr .headerSort').removeClass('headerSortDown headerSortUp');
			$sorter.addClass('headerSortUp');
		}
		
		$('#CardSelectTr>tbody').hide()
			.prepend(computedRows)
			.show();
	}
	
	
	$('.cardSelectOption').off('click').off('mousedown');

	if ($('#CardSelectTabHeader').parent().is('tbody')){
		$('#CardSelectTr').prepend( $('<thead/>').append($('#CardSelectTabHeader')));
	}
	
	self.Init();
	
	console.log('CardSelectTr.js Initialized.');
	return self;
});

/*筛选结束*/
/* -- 为页面加载JS脚本或CSS样式表 -- */
/* 参见[[模板:ResourceLoader]]*/
/* 来源:碧蓝航线WIKI*/
$('.resourceLoader').each(function() {
	var $x = $(this);
	var text = $.trim($x.text());
	
	if (!text) return;
	
	//加载模块
	if ($x.data('isModule') == true) 
		return mw.loader.load(text);	
	
	//自动补充MediaWiki命名空间
	var ns = text.match('^.*?:');
	if (!ns) text = 'MediaWiki:' + text;
	
	//加载CSS样式表
	var mime = ($x.data('mime') || "text/javascript").toLowerCase();
	if (mime == "text/css") {
		if (text.slice(-4).toLowerCase() !== '.css') text = text + '.css';
		//if ($x.data('debug') !== true) text = text + '&debug=false';
		return mw.loader.load("//wiki.biligame.com"+mw.config.values.wgScriptPath+"/index.php?title="+text+"&action=raw&ctype=text/css", "text/css");
	}
	
	//加载JS脚本
	if (ns && ns[0].toLowerCase() !== 'mediawiki:') {
		return console.log('ResourceLoader: 不允许加载MediaWiki以外的js脚本');
	}
	if (text.slice(-3).toLowerCase() !== '.js') text = text + '.js';
	//if ($x.data('debug') !== true) text = text + '&debug=false';
	return mw.loader.load("//wiki.biligame.com"+mw.config.values.wgScriptPath+"/index.php?title="+text+"&action=raw&ctype=text/javascript", "text/javascript");
});


//音频事件
$('.audio-controls').click(function () {
    var audio = $(this).parent().find('audio').get(0);
    var controlBtn = $(this).find('.icon-btn');
    audio.addEventListener('ended', function() {
      audio.currentTime = 0;
      audio.pause();
      controlBtn.removeClass('icon-pause').addClass('icon-play');
    }, false); // 监听播放完成事件
    // 改变暂停/播放icon
    if (audio.paused) {
      audio.play();
      controlBtn.removeClass('icon-play').addClass('icon-pause');
    } else {
      audio.pause();
      controlBtn.removeClass('icon-pause').addClass('icon-play');
    }
  })
  
  
/* ==Popover弹出框== */
//找到Bootstrap初始化的jQuery
function getjQuery(jquery) {
        var x = [jquery, $, window.$, window.jQuery];
        var _j = window.$;
        
        for (var i = 0; i < 4; i++) {
                var j = x[i];
                if (j && j.fn) {
                        if (typeof j.fn.popover == 'function')
                                return j;
                        j.noConflict();
                        j = window.$;
                        window.$ = _j;
                        if (j && j.fn && typeof j.fn.popover == 'function')
                                return j;
                }
        }
        throw('getjQuery:未能找到Bootstrap初始化的jQuery');
}
$(function() {
        var $ = getjQuery();
        
        $('[data-toggle="wafer-popover"]').popover({
                container: false,
                content: function() {
                        var $c = $(this);
                        var content = '<p class="head">' + ($c.data('head') || '详细信息') + '</p>'
                                                + '<p>' + $c.data('text') + '</p>';
                        return content;
                },
                html: true,
                placement: 'auto bottom',
                template: 
'<div class="popover wafer-popover" role="tooltip"><div class="arrow"></div><div class="popover-content"></div></div>',
                trigger: 'hover'
        }).find('a').attr('title','');
});
/* --Popover弹出框-- */

/* == 加载Bikit == */
try { mw.loader.load('//wiki.biligame.com/wiki/MediaWiki:Bikit.js?action=raw&ctype=text/javascript');} catch(e) {}
/* -- 加载Bikit -- */

/* 技术处理外链 来源:异星工厂WIKI */
$("a").each(function(){
  	url=$(this).attr("href");
  	if(typeof(url)!="undefined"){
		key=["game.bilibili.com","space.bilibili.com","wiki.biligame.com","qun.qq.com"];
		var status=false;
		key.forEach(function(k){
		    status=url.replace(/^.+linkfilter\/\?url=https*:\/\/([^\/]+).*$/ig, "$1").indexOf(k)>=0||status;
		});
		url=status?url.replace(/^.+linkfilter\/\?url=(.+)/g, "$1"):url;
		$(this).attr("href",url);
  	}
});

//编辑器插件SmartClick引入
$(function(){
	mw.loader.load("//wiki.biligame.com" + mw.util.wikiScript("") + "?title=MediaWiki:SmartClick.js&action=raw&ctype=text/javascript", "text/javascript");
	console.log("SmartClick.js initialized!");
});

/* 优化版本差异,爱来自 编辑组 Lu 39886146 */
mw.loader.load("/tools/MediaWiki:DiffTool.js?action=raw&ctype=text/javascript&rand=", "text/javascript");

/* 切换标签套娃修复 */
$(".resp-tabs .resp-tabs-list .bili-list-style").unbind("click").click(function() {
    $(this).addClass("active").siblings().removeClass("active");
    var e = $(this).index();
    $(this).parents(".resp-tabs").eq(0).children(".resp-tabs-container").children(".resp-tab-content").eq(e).show().siblings().hide(),
    $(".resp-accordion-handle").hide()
})


/* ==雷达图== */
if ($('div[data-type="canvas"]')[0]) {
	mw.loader.load("https://wiki.biligame.com/blhx/index.php?title=MediaWiki:Info.js&action=raw&ctype=text/javascript");
}
/* --雷达图-- */


(function(){
	function IsPC(){ 
        var userAgentInfo = navigator.userAgent; 
        var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"); 
        var flag = true; 
        for (var v = 0; v < Agents.length; v++) { 
        if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } 
        } 
        return flag; 
    }
    if(IsPC()){
        pc_check();
    }
	function pc_check(){
	    //卡牌展示
		function imgShow(){
			var imgs=document.getElementById('img-box');
			if (!imgs) return;
			var imgList=imgs.getElementsByTagName('ul')[0].getElementsByTagName('li');
			var p=document.getElementById('p-btn');
			var n=document.getElementById('n-btn');
			var imgBtn=document.getElementById('img-btn');
			var btnList=imgBtn.getElementsByTagName('li');
			var iNub=0;
			var times=null;
			addBtn();
			//add
			function addBtn()
			{
				for(var i=0;i<imgList.length;i++)
				{
					var addLi=document.createElement('li');
					imgBtn.appendChild(addLi);
				};
			}
			for(var j=0;j<btnList.length;j++)
			{
				btnList[0].className='sel';
				btnList[j].index=j;
				btnList[j].onclick=show;
			}
			imgs.onmouseover=function()
			{
				clearInterval(times);
			}
			imgs.onmouseout=function(){
				times=setInterval(function(){
				next();
				},2000);
			}
			//下一个
			n.onclick=next;
			//上一个
			p.onclick=function(){
				iNub=iNub-1;
				if(iNub<0){
					iNub=btnList.length-1;
					}
				soll();
			}
			//tab
			function show(){
				 for(var j=0;j<btnList.length;j++){
					 btnList[j].className='';
					 imgList[j].className='';
					 this.className='sel';
					 imgList[this.index].className='show';
					 iNub=this.index;
				}
			}
			//next
			function next(){
				iNub=iNub+1;
				if(iNub>=btnList.length){
					iNub=0;
				}
				soll();
			}
			//soll
			function soll()
			{
				for(var i=0;i<btnList.length;i++){
					btnList[i].className="";
					imgList[i].className="";
				}
				btnList[iNub].className="sel";
				imgList[iNub].className="show";
			}
			
			times=setInterval(function(){next();},2000);
		}
		imgShow();


		/* 图片轮播 */
	    if ($('#pic-ctrl span').length > 1 && $('#pic-ctrl span').length == $('.pic-box').length) {
	        setLoop();
	        $('.pic').hover(function(){clearInterval(itimer)}, function(){setLoop()});
	        $('#pic-ctrl span').each(function(e){
	            $(this).mouseover(function(){changePicFocus(e);})
	        })
	    }
            var iidx=null;
	    function changePicFocus(idx) {
	        $('#pic-ctrl span').removeClass().eq(idx).addClass('current');
	        $('.pic-box').hide().eq(idx).show();
	        iidx = idx;
	    };
     	//图片滑过显示下方提示
     	function hoverImage(){
			$('.imageSlider').mouseover(function(){
				$(this).children('span').stop().animate({'height':'26px'},200);
			})
			$('.imageSlider').mouseout(function(){
				$(this).children('span').stop().animate({'height':'0px'},200);
			})
		}
	    function setLoop() {
	        itimer = setInterval(function(){
	            iidx==$('#pic-ctrl span').length-1 ? iidx=0 : iidx++;
	            changePicFocus(iidx);
	        }, 2000);
	    };
	};
})();

/* --趣味测试-- */
(function(){
var mod={
    events:null,
    //pc返回true
    IsPC:function(){  
        var userAgentInfo=navigator.userAgent;  
        var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");  
        var flag = true;  
        for (var v = 0; v < Agents.length; v++) {  
            if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; }  
        }  
        return flag;  
    },        
    int:function(submitBtn){
        mod.sub=submitBtn;
        if(mod.IsPC()){
            mod.events='click';
        }else{
            mod.events='touchstart';
            document.getElementsByTagName('body')[0].style.minWidth='100px';
        };
        mod.checks();
    },
    checks:function(){
        var ev=mod.events,
            btn=mod.sub;
		$('.input-lg').attr('contenteditable','true');
		//禁止按回车键时换行
		$('.detection-text').on("keydown",function(e){
				var keyCode=0,e=e||event; 
				if (e.keyCode == 13){
						e.preventDefault();
					}
			});
		//禁止按回换行
        btn.on(ev,function(){
            var vals=$.trim($('.input-lg').text());
            if(vals===''){
                $('.result').html('');
                $('.result').html('<h3>请您输入要诊断的内容</h3>');
            }else{ 

           var len=$('#data span').length-1;       
           if(len<0){
                alert('页面标签错误');
                return false;
            }         
            var newurl = '/'+window.wgWikiname+"/joyme_api.php?action=InterestTesting";
            $.ajax({
                  url:newurl,
                  type:"get",
                  async: false,
                  data:{"vals":vals,"len":len},
                  success:function(msg){
                            var data = eval('(' + msg + ')');
                            if(data['rs']==1){
                                     $('.result').html(''); 
                                     var title=$('#data span').eq(data['result']).attr('title');
                                     img_url=$('#data span').eq(data['result']).attr('data-img');
                                     url=$('#data span').eq(data['result']).attr('data-url');
                                     var html='<span>'+vals+title+'</span><a href="'+url+'"><img src="'+img_url+'"></a>';
                                     $('.result').html(html);  
                            }else{
                                    alert('程序异常');
                            }
                  }
               })
            }		
        });		
    }
};

	mod.int($('.submit'));
/* --趣味测试end-- */
/* --分享-- */

var bdshareurl = window.location.href;
var bdsharepic = $('#bdsharepic img').attr('src');
var bdsharetitle = document.title;
bdsharedesc = $('#bdsharedesc').html();

$('.bdsharebuttonbox').html('<a href="#" class="bds_qzone" data-cmd="qzone"></a><a href="#" class="bds_tsina" data-cmd="tsina"></a><a href="#" class="bds_tqq" data-cmd="tqq"></a><a href="#" class="bds_renren" data-cmd="renren"></a><a href="#" class="bds_weixin" data-cmd="weixin"></a><a href="#" class="bds_tieba" data-cmd="tieba"></a>');

window._bd_share_config = {
		common : {
			bdText : bdsharetitle,
			bdDesc : bdsharedesc,	
			bdUrl : bdshareurl, 	
			bdPic : bdsharepic
		},
		share : [{
			"bdSize" : 16
		}],
	}
	with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?cdnversion='+~(-new Date()/36e5)];

})();
/* --分享end-- */

// quickview
var qvel = document.querySelectorAll(".msquickview");
var qvitem = "";

for (var i = 0; i < qvel.length; i++) {
	qvel[i].addEventListener(    "mouseenter",    function () {      msqv(this);    },    false  );
	qvel[i].addEventListener(    "mousemove",    function () {      msqvmove(this);    },    false  );
	qvel[i].addEventListener(    "mouseleave",    function () {      msqvhide(this);    },    false  );
}

function msqv(a) {
	var qvigp = a.children;
	for (var i = 0; i < qvigp.length; i++) {
		if (qvigp[i].className == "msqvitem") {
			qvitem = qvigp[i];
			break;
		}
	}
	qvitem.style.display = "block";
}

function msqvmove(a) {
	var qvb = event || window.event;
	if (window.innerWidth <= qvb.clientX + qvitem.clientWidth + 10)
    	{qvitem.style.right ="5px";qvitem.style.left ="unset";}
		else
    	{qvitem.style.left = qvb.clientX + 5 + "px";qvitem.style.right ="unset";};
	qvitem.style.top = qvb.clientY + 5 + "px";
  // console.clear();
  // console.log(window.innerWidth);
  // console.log("悬浮物宽度"+qvitem.clientWidth);
  // console.log(document.body.clientWidth - qvitem.clientWidth+"差值");
  // console.log(qvb.clientX);
  // console.log(qvb.clientX + qvitem.clientWidth - 5);
}
//position:fixed;clientXY=窗口位置;pageXY=文档位置;

function msqvhide(a) {
  qvitem.style.display = "none";
}
// quickview end


/* -- B站视频 抄自碧蓝航线 --*/
var BiliVideo=document.getElementsByClassName("BiliVideo")
for(var i=0,ilen=BiliVideo.length;i<ilen;i++){
	var v=BiliVideo[i].dataset.v
	if(!isNaN(v)){
		v="aid="+v
	}
	else if(/^av[0-9]+$/i.test(v)){
		v="aid="+v.substr(2)
	}
	else if(/^bv[a-z0-9]+$/i.test(v)){
		v="bvid=BV"+v.substr(2)
	}
	else{
		v="bvid=BV"+v
	}
	var p="page="+(Number(BiliVideo[i].dataset.p)||1)
	var w=Number(BiliVideo[i].dataset.w)||600
	var h=Number(BiliVideo[i].dataset.h)||421
	BiliVideo[i].innerHTML='<iframe src="//www.bilibili.com/blackboard/newplayer.html?'+v+'&'+p+'&autoplay=" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="'+w+'" height="'+h+'" style="max-width:100%;max-height:60vw;"></iframe>'
}