// ==UserScript==
// @name bgm-tv-hover-more-info
// @name:zh 鼠标指向条目链接时显示更多信息
// @namespace https://trim21.me/
// @description 在讨论贴中添加一个悬浮窗显示条目信息
// @version 0.2.0
// @author Trim21
// @source https://github.com/Trim21/bgm-tv-hover-info
// @supportURL https://github.com/Trim21/bgm-tv-hover-info/issues
// @license MIT
// @match https://bgm.tv/group/topic/*
// @match https://bangumi.tv/group/topic/*
// @match https://chii.in/group/topic/*
// @match https://bgm.tv/index/*
// @match https://bangumi.tv/index/*
// @match https://chii.in/index/*
// @match https://bgm.tv/rakuen/topiclist
// @match https://bangumi.tv/rakuen/topiclist
// @match https://chii.in/rakuen/topiclist
// @require https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js
// @run-at document-end
// @downloadURL none
// ==/UserScript==
/******/ (() => { // webpackBootstrap
/******/ "use strict";
var __webpack_exports__ = {};
;// CONCATENATED MODULE: external "$"
const external_$_namespaceObject = $;
;// CONCATENATED MODULE: ./src/index.ts
const style = `
`;
function createPopup(subject) {
var _a;
let rank = "";
if (subject.rating.rank) {
rank = `
${subject.rating.score} (${subject.rating.total}人评分)
`;
}
let tags = "";
if (subject.tags.length) {
tags = "";
}
return `
${subject.name}
${subject.name_cn}
${subject.summary}
${rank}
${tags}
`;
}
async function main() {
console.log(GM.info.script.name);
external_$_namespaceObject("head").append(style);
external_$_namespaceObject("a").each((i, e) => {
if (isBangumiSubjectHref(external_$_namespaceObject(e).attr("href"))) {
external_$_namespaceObject(e).on("mouseover", hoverHandler).on("mouseleave", leaveHandler);
}
});
}
function isBangumiSubjectHref(s) {
if (!(s == null ? void 0 : s.length))
return false;
return /\/subject\/\d+/.test(s) || /https:\/\/bgm.tv\/subject\/\d+/.test(s) || /https:\/\/bangumi.tv\/subject\/\d+/.test(s) || /https:\/\/chii.in\/subject\/\d+/.test(s);
}
async function leaveHandler() {
external_$_namespaceObject("#popup").remove();
console.log("leave");
}
async function hoverHandler() {
const e = external_$_namespaceObject(this);
const href = e.attr("href");
if (!href) {
return;
}
const offset = e.offset() ?? { left: 0, top: 0 };
external_$_namespaceObject("body").append('');
const popup = external_$_namespaceObject("#popup").css({
left: offset.left,
top: offset.top + 40,
position: "absolute",
"z-index": 1e3
});
const subjectID = href.split("/").pop();
if (!subjectID) {
return;
}
const res = await fetch(`https://api.bgm.tv/v0/subjects/${subjectID}`);
if (res.status > 400) {
popup.html("not found");
return;
}
const data = await res.json();
let html = createPopup(data);
if (res.redirected) {
html = "条目被合并到此条目" + html;
}
popup.html(html);
}
main().catch(console.error);
/******/ })()
;