社区文档构建中,欢迎编辑。 社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

用户:16083703/BwikiAvatarFrame.js

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
var wikiName = mw.config.get('wgScriptPath').replace("/","")
var userId = document.cookie.match(/DedeUserID=([^;]+)/)[1]

// 获取数据
$.ajaxSettings.async = false;
if (sessionStorage.getItem("avatar_"+ wikiName +"_avatarData") == null) {
    var avatarDataUrl = "https://wiki.biligame.com/" + wikiName + "/Data:Avatar.json?action=raw";
    $.ajax({url:avatarDataUrl,type:'GET',
        success:function (obj) {			
            try{
                avatarData= JSON.parse(obj.replace(/(\n|\s)/g,"").replace(/(,])|(,})/g,function(e){return e == ',]' ? "]" : "}"}))
                if(typeof(newAvatarData) !== "undefined"){
                    $.each(newAvatarData,function (index, item){
                        if(index in avatarData.头衔){
                            avatarData.头衔[index].boxTop = item.box
                            $.each(item.tag,function (tagIndex, tagItem) {
                                if(avatarData.头衔[index].tag.indexOf(tagItem) == -1){
                                    avatarData.头衔[index].tag.push(tagItem)
                                }
                            })
                        }else{
                            avatarData.头衔[index] = item
                        }
                    })
                }
            }catch(err){
                console.error("评论区头衔:请确认用户头衔数据为正确的json格式↓\n",'https://wiki.biligame.com/'+ wikiName +'/Data:Avatar.json\n')
            }
            sessionStorage.setItem("avatar_"+ wikiName +"_avatarData", JSON.stringify(avatarData));
            return avatarData;
        },error:function(req, status, err){
            console.error("评论区头衔获取头衔相关数据失败:",err)
            return avatarData = false
        }
    });
}else{
    var avatarData = JSON.parse(sessionStorage.getItem("avatar_"+ wikiName +"_avatarData"))
}


// 获取用户昵称
if(avatarData !== false){
	if (sessionStorage.getItem("avatar_"+ wikiName +"_UserName") == null) {
	    var userName = {};
	    function newNameBox(array, subLength) {
            var index = 0;
            var newArr = [];
            while(index < array.length) {
                newArr.push(array.slice(index, index += subLength));
            }
            return newArr;
        }
        var uuidBox= newNameBox(Object.keys(avatarData.头衔), 50);
        var uuidBoxIndex = 0
        function getUserName(boxIndex) {
            var url = "https://api.vc.bilibili.com/account/v1/user/cards?uids=" + uuidBox[boxIndex].join();
            $.getJSON(url, function (obj) {
                if(obj.message)console.error("评论区头衔:获取用户昵称:",obj.message)
                $.each(obj.data, function (index, item) {
                    userName[item.mid] = item.name;
                });
            });
            uuidBoxIndex++
            if(uuidBoxIndex < uuidBox.length) {
                setTimeout("getUserName("+uuidBoxIndex+")",500)
            }else{
	    		sessionStorage.setItem("avatar_"+ wikiName +"_UserName", JSON.stringify(userName));
            }
        }
        getUserName(0)
	}else{
	    var userName = JSON.parse(sessionStorage.getItem("avatar_"+ wikiName +"_UserName"))
	}
}

// 添加头衔等
var avatarTimeOut = 0;
var commentLoading = setInterval(function () {
	avatarTimeOut++
	if(avatarData == false){
        clearInterval(commentLoading);
		console.log("评论区头衔:获取数据失败请刷新页面重试")
	}else if ($("#flowthread").length !== 0 && localStorage.getItem("avatarStor_" + wikiName) !== null) {
        clearInterval(commentLoading);
        avatarFrame(userName,avatarData);
        avatarAddSet(avatarData)
    } else if (avatarTimeOut> 50) {
		// 超时
		clearInterval(commentLoading);
	}
}, 500);
window.changeFrame = setInterval(function () {
    if ($("#avatarFrameShow").length == 0) {
        avatarFrame(userName,avatarData);
    }
}, 1000);
		

var avatarFrame = function(userName,avatarData) {
	if ($("#avatarFrameShow").length == 0) {
		$(".comment-container").prepend('<span id="avatarFrameShow" style="display:none;">评论区自定义头衔等</span>');
	}
	// 加载data Wiki
	mw.loader.getScript("/data/index.php?title=MediaWiki:Api.js&action=raw&ctype=text/javascript", "text/javascript").then(function () {
		var nb = new NGBASE()
		nb.read("avatarUserData_" + wikiName).then((res) => {
			var boxType = res
			$(".comment-post .comment-user-name").each(function () {
				var that = $(this);
				var thisUserName = that.text()
				if (Object.values(userName).indexOf(thisUserName) !== -1) {
					var thisUserId = Object.keys(userName)[Object.values(userName).indexOf(thisUserName)]
					
					if (Object.keys(res).indexOf(thisUserId) !== -1) {
						var url = avatarData.头像框[boxType[thisUserId]];
					}  else if(avatarData.头衔[thisUserId].boxTop !== undefined){
						var url = avatarData.头像框[avatarData.头衔[thisUserId].boxTop[0]];
					} else {
						var url = avatarData.头像框[avatarData.头衔[thisUserId].box[0]];
					}
					if (url !== undefined) {
						var dom1 = '<img class="avatar-box-frame" src="' + url + '" alt="">';
						that.parent().parent().prev().append(dom1);
					}
	                var tag = avatarData.头衔[thisUserId].tag;
	                if (tag !== undefined) {
	                    var dom2 = $('<div class="tag-box"></div>');
	                    $.each(tag, function (tagIndex, tagItem) {
	                        var spanBg = tagColor(tagItem);
	                        var newTag = '<span style="background:' + spanBg + '">' + tagItem + "</span>";
	                        dom2.append(newTag);
	                    });
	                    that.next().after(dom2);
	                }
				}
			})

			
		})
		
    })
}

// 默认头像颜色
var colorData={"#24acf2": ["管理员","数据组","技术组","攻略组","地图组","编辑组","翻译组","考究组","同人组","养老组","美工组","巡查"],"#fcc522": ["页面编辑者","页面贡献者","作者"],"#804ed1": ["站长","前站长"],"#27c309":["全站管理员"]}
// 更改头衔颜色
var tagColor=function (e) {
	$.ajaxSettings.async = false;
	if (sessionStorage.getItem("avatar_"+ wikiName +"_colorData") == null) {
        $.each(avatarData.头衔颜色,function(index,item){
            if(index in colorData){
                colorData[index].push(...item)
            }else{
                colorData[index]=item
            }
        })
        sessionStorage.setItem("avatar_"+ wikiName +"_colorData", JSON.stringify(colorData));
    }else{
		colorData = JSON.parse(sessionStorage.getItem("avatar_"+ wikiName +"_colorData"))
    }
    var color
	var keys=Object.keys(colorData).reverse()
    $.each(keys,function(index,item){
        if(colorData[item].indexOf(e)!==-1){
            color = item
            return false
        }
    })
    if(color == undefined) color = "#a7a5a5"
    return color
}