// ==UserScript==
// @name Bilibili Popups
// @namespace http://tampermonkey.net/
// @version 1.0
// @description B站内链助手
// @author Sheep-realms
// @match *://*.bilibili.com/*
// @icon https://www.google.com/s2/favicons?domain=bilibili.com
// @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @license CC BY-NC-SA 3.0
// @grant none
// @downloadURL none
// ==/UserScript==
let popupsState = 0;
let popupsTimer;
let mx = 0;
let my = 0
let disable = false;
$(document).mousemove(function(event){
mx = event.pageX;
my = event.pageY;
});
$(document).keydown(function(e) {
disable = e.altKey;
})
$(document).keyup(function(e) {
disable = e.altKey;
})
$(document).ready(function() {
var csslist = "";
csslist += "#popups {max-width: 320px; position: absolute; background-color: #FFF; border: #BBB 1px solid; box-shadow: rgb(50 50 50 / 35%) 0 3px 8px; z-index: 12000; padding: 10px; color: #222;}";
csslist += ".hide {display: none;}";
csslist += "#popups .video-stat tr td:first-child {padding-right: 1.5em;}";
csslist += "#popups .video-stat tr td {line-height: 1.5em;}";
csslist += "#popups h4 {font-size: 14px; border-bottom: #BBB 1px solid; margin-bottom: 5px; font-weight: bold;}";
csslist += "#popups p {color: #222; font-size: 12px; line-height: 1.5em;}";
csslist += "#popups a {color: #00a1d6;}";
csslist += "#popups .video-desc {max-width: 300px; max-height: 150px; padding: 5px; background-color: #F4F4F4; overflow: hidden;}";
$('head').append('');
$("body").append('
');
$("#popups").mouseenter(function() {
// console.log(">> mouseover #popups");
popupsState = 1;
clearTimeout(popupsTimer);
});
$("#popups").mouseleave(function() {
// console.log("<< mouseleave #popups");
popupsState = 0;
clearTimeout(popupsTimer);
popupsTimer = setTimeout(function() {
$("#popups").addClass('hide');
}, 500)
});
});
$(document).on("mouseenter", "a:not(#popups a, .router-link-active)", function() {
// console.log(">> mouseover a");
if (disable) return false;
let a = $(this).offset();
let $that = $(this);
popupsState = 1;
clearTimeout(popupsTimer);
let mode = "";
let url = $(this).attr("href");
let path = getUrlPath($(this).attr("href"));
let biliAv, biliBv, uid;
if (path.search(/\/video\/av/) != -1) {
mode = "av";
biliAv = path.slice(9);
} else if (path.search(/\/video\/BV/) != -1) {
mode = "bv";
biliBv = path.slice(7);
} else if (url.search(/space.bilibili.com/) != -1) {
mode = "user";
if (path == "space.bilibili.com" || path == "/") return false;
if (path.search(/\/[a-z]/) != -1) {
uid = path.slice(1,path.search(/\/[a-z]/));
} else {
uid = path.slice(1);
}
} else {
return false;
}
popupsTimer = setTimeout(function() {
$("#popups").html('');
$("#popups .title").text("加载中...");
if (mode == "av") {
getVideoInfoAV(biliAv);
}
if (mode == "bv") {
getVideoInfoBV(biliBv);
}
if (mode == "user") {
getUserInfo(uid);
}
$("#popups").removeClass('hide');
//$("#popups").css("left", a.left).css("top", a.top + 20);
$("#popups").css("left", mx + 5).css("top", my + 5);
}, 500)
});
$(document).on("mouseleave", "a:not(#popups a, .router-link-active)", function() {
// console.log("<< mouseleave a");
popupsState = 0;
clearTimeout(popupsTimer);
popupsTimer = setTimeout(function() {
$("#popups").addClass('hide');
}, 500)
});
function getUrlPath(url){
var arrUrl = url.split("//");
var start = arrUrl[arrUrl.length - 1].indexOf("/");
var relUrl = arrUrl[arrUrl.length - 1].substring(start);
if(relUrl.indexOf("?") != -1){
relUrl = relUrl.split("?")[0];
}
return relUrl;
}
function getJSONInfo(url) {
$.getJSON(url,
function (ajson) {
console.log(ajson);
});
}
function getVideoInfoAV(aid) {
$.getJSON("https://api.bilibili.com/x/web-interface/view?aid=" + aid,
function (ajson) {
if (ajson.code == 0) {
factoryVideoInfo(ajson.data);
} else {
getVideoInfoError();
}
});
}
function getVideoInfoBV(bvid) {
$.getJSON("https://api.bilibili.com/x/web-interface/view?bvid=" + bvid,
function (ajson) {
if (ajson.code == 0) {
factoryVideoInfo(ajson.data);
} else {
getVideoInfoError();
}
});
}
function factoryVideoInfo(obj) {
$("#popups .title").text(obj.title);
$("#popups").append('av'+obj.aid+' | '+obj.bvid+'
');
$("#popups").append('作者:'+obj.owner.name+'(动态 | 投稿 | 列表)
');
$("#popups").append('分区:'+obj.tname+'
');
$("#popups").append('发布时间:'+getDateTime(obj.pubdate)+'
');
$("#popups").append('播放:'+obj.stat.view+'
');
$("#popups").append('');
$("#popups .video-stat").append('点赞:'+obj.stat.like+' | 投币:'+obj.stat.coin+' |
');
$("#popups .video-stat").append('弹幕:'+obj.stat.danmaku+' | 评论:'+obj.stat.reply+' |
');
$("#popups .video-stat").append('收藏:'+obj.stat.favorite+' | 分享:'+obj.stat.share+' |
');
//$("#popups").append('时长:'+obj.duration+'
');
$("#popups").append('BiliPlus
');
$("#popups").append('查看视频封面
');
$("#popups").append('简介:
');
$("#popups").append(''+obj.desc+'
');
}
function getVideoInfoError() {
$("#popups").html('出错啦!
');
$("#popups").append('未能获取视频信息,可能是网络问题,或是视频已被删除。
');
}
function getUserInfo(uid) {
$("#popups").append('UID:...
');
$("#popups").append('关注:... | 粉丝:...
');
$.getJSON("https://api.bilibili.com/x/space/acc/info?mid="+uid,
function (ajson) {
if (ajson.code == 0) {
let obj = ajson.data;
$("#popups .title").text(obj.name);
$("#popups .user-uid").text(obj.mid);
$("#popups").append('等级:Lv'+obj.level+'
');
$("#popups").append('动态 | 投稿 | 列表
');
$("#popups").append('查看头像
');
$("#popups").append('查看主页头图
');
}
});
$.getJSON("https://api.bilibili.com/x/web-interface/card?mid="+uid,
function (ajson) {
if (ajson.code == 0) {
let obj = ajson.data.card;
$("#popups .user-friend ").text(obj.friend);
$("#popups .user-fans").text(obj.fans);
}
});
}
function getDateTime(stamp) {
let t = new Date(stamp * 1000);
return t.getFullYear() + '-' + (t.getMonth() + 1) + '-' + t.getDate() + ' ' + t.getHours() + ':' + t.getMinutes() + ':' + t.getSeconds();
}