// ==UserScript==
// @name myBilibiliVideoTools.USER.JS
// @namespace http://tampermonkey.net/
// @match https://www.bilibili.com/video/*
// @icon http://bilibili.com/favicon.ico
// @noframes
// @run-at document-start
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addStyle
// @compatible firefox
// @description 我本人在哔哩哔哩看视频的专用工具,内置多个功能,可以设置倍速,音量,全屏等,详情见图片.本脚本永久开源,永久免费。本脚本不得被用于任何的非法用途,仅能被合法的学习和使用。如果您安装了本脚本,产生的一切后果均由您承担,本人概不负责。本脚本的后续更新与否只取决于本人的心情。
// @license MIT
// @version 0.0.1.20220416055812
// ==/UserScript==
"use strict"
function _typeof(e) {
"@babel/helpers - typeof"
return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
} : function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
})(e)
}~ function() {
function e(t) {
var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : !1
unsafeWindow.vedio = t, t.addEventListener("ended", function() {
_.click()
}), t.addEventListener("loadeddata", function() {
c(!0, !0, !0)
}), t.addEventListener("myqualitychange", function() {
var t = unsafeWindow.vedio,
n = setInterval(function() {
var i, l, a = document.querySelector("video")
a && (i = t.src, l = a.src, l != i && "" != l && (clearInterval(n), t.dispatchEvent(new CustomEvent("myqualitychanged"), {
detail: {
newV: a
}
}), e(a, !0)))
}, 1e3)
}), t.addEventListener("myqualitychanged", function(e) {
unsafeWindow.vedio = e.detail.newV
}), n && c(!1, !1, !1)
}
function t() {
return !(!document.fullscreen && !document.mozFullScreen)
}
function n() {
var e = setInterval(function() {
var t = document.querySelector("span.like")
t && (t.className.indexOf("on") < 0 ? (clearInterval(e), t.click()) : clearInterval(e))
}, 3e3)
}
function i(e) {
return Function("return " + e)()
}
function l(e) {
switch (e) {
case 1:
document.querySelector("#bilibiliPlayer").getAttribute("class").indexOf("webfullscreen") > 0 ? (document.querySelector("div.bilibili-player-video-web-fullscreen").click(), setTimeout(document.querySelector("button.bilibili-player-iconfont-web-fullscreen-on").click(), 500)) : document.querySelector("button.bilibili-player-iconfont-web-fullscreen-on").click()
break
case 2:
L.click()
}
}
function a() {
var e = +GM_getValue("qualifyFlag", 64),
t = document.createDocumentFragment(),
n = document.querySelector(".bui-select-list"),
i = n.children
i.forEach(function(n) {
var i = document.createElement("option")
i.innerText = n.children[0].innerHTML, i.value = n.dataset.value, i.value == e && (i.selected = 1), t.append(i)
}), H.innerHTML = "", H.append(t)
}
function c() {
var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : !0,
i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : !0,
c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : !0,
o = +GM_getValue("myScreenFlag", 1)
E.click(), l(o), 1 == t && n(), i && a(), c && (e = document.querySelector("ul.bilibili-player-video-btn-menu").children.length, e ? k.style.display = "block" : k.style.display = "none")
}
function o(e) {
e.requestFullscreen()
}
var u, r, d, m, s, v, b, p, f, y, g, E, w, k, h, _, S, L, M, q, x, T, N, W, G, V, F, H, R, I
for (unsafeWindow.GM_addStyle = GM_addStyle, unsafeWindow.GM_setValue = GM_setValue, unsafeWindow.GM_getValue = GM_getValue, GM_addStyle("\ndiv.bilibili-player-video-btn-widescreen{\ndisplay:none !important;\n}.myRadiosOnRate{\n scale:1.5\n}.mbvt_div{\n position: fixed;\n top: 30% !important;\n right: 0 !important;\n z-index: 9999999;\n background: black;\n color: white;\n}.mbvt_items{\n width: 60px;\n color:initial;\n}.mbvt_items2 {\n width: 60px;\n background: black;\n color: white;\n}.bilibili-player-video-info{\n position: fixed;z-index:9999999;\n top:50% !important;\n left: 0 !important;\n width: 120px!important;\n text-align: left!important;\n display:table!important;\n}.r-con {\n width: 420px !important;\n margin: 0 !important;\n padding: 0 !important;\n}.bilibili-player-video-btn-menu-wrap {\n width: 1000px !important;\n}"), u = document.createElement("div"), u.id = "myDiv0", u.className = "mbvt_div", u.innerText = "按N隐藏", r = document.createElement("div"), r.innerText = "my develop zone", r.className = "mbvt_div", d = document.createElement("div"), m = document.createElement("button"), m.className = "mbvt_items", m.innerHTML = "myInit", m.addEventListener("click", c), s = document.createElement("button"), s.className = "mbvt_items", s.innerHTML = "rate1X", s.addEventListener("click", function() {
unsafeWindow.vedio.playbackRate = 1
}), v = document.createElement("div"), v.id = "mySubDiv1", b = document.createElement("button"), b.className = "mbvt_items", b.innerHTML = "setRate:", b.addEventListener("click", function() {
var e = p.value
unsafeWindow.vedio.playbackRate = e, GM_setValue("myPlaybackRateFlag", e)
}), p = document.createElement("input"), p.className = "mbvt_items", p.placeholder = "0-4", p.value = GM_getValue("myPlaybackRateFlag", 2), f = document.createElement("div"), y = document.createElement("div"), g = document.createElement("div"), E = document.createElement("button"), E.className = "mbvt_items", E.addEventListener("click", function() {
var e = w.value
document.querySelector("video").playbackRate = e / 100, unsafeWindow.vedio.volume = e / 100, b.click(), GM_setValue("volumeFlag", e)
}), E.innerHTML = "setVolume:", w = document.createElement("input"), w.className = "mbvt_items", w.placeholder = "0-100", w.value = GM_getValue("volumeFlag", 100), k = document.createElement("div"), h = document.createElement("button"), h.innerHTML = "preEpisode", h.className = "mbvt_items", h.onclick = function() {
document.querySelector(".bilibili-player-active").previousSibling.click()
}, _ = document.createElement("button"), _.innerHTML = "nextEpisode", _.className = "mbvt_items", _.onclick = function() {
document.querySelector(".bilibili-player-active").nextSibling.click()
}, S = document.createElement("button"), S.innerHTML = "web全屏", S.setAttribute("class", "mbvt_items2"), S.addEventListener("mouseover", function() {
document.querySelector("#bilibiliPlayer").getAttribute("class").indexOf("mode-webfullscreen") < 0 ? document.querySelector("button.bilibili-player-iconfont-web-fullscreen-off").click() : t() && setTimeout(function() {
document.querySelector("button.bilibili-player-iconfont-web-fullscreen-on").click()
}, 500), M.removeAttribute("disabled"), unsafeWindow.player.play()
}), L = document.createElement("button"), L.innerHTML = "fullscreen", L.className = "mbvt_items", L.addEventListener("click", function() {
o(unsafeWindow.vedio), unsafeWindow.vedio.focus()
}), M = document.createElement("button"), M.innerHTML = " exit全屏 ", M.className = "mbvt_items", M.addEventListener("click", function() {
document.querySelector("#bilibiliPlayer").getAttribute("class").indexOf("webfullscreen") > 0 ? document.querySelector("div.bilibili-player-video-web-fullscreen").click() : t() && document.exitFullscreen(), unsafeWindow.vedio.focus()
}), q = document.createElement("div"), x = document.createElement("div"), T = document.createElement("div"), N = document.createElement("button"), N.innerHTML = "myDanmuku", N.className = "mbvt_items", N.addEventListener("click", function() {
document.querySelector('input.bui-switch-input[aria-label="弹幕"]').click()
}), W = [], G = 0; 2 > G;) V = document.createElement("input"), V.type = "radio", V.className = V.name = "myRadiosOnRate", V.value = G += .5, V.addEventListener("change", function(e) {
var t = e.target,
n = t.value
unsafeWindow.vedio.playbackRate = n, t.parentElement.nextElementSibling.lastElementChild.value = n, GM_setValue("myPlaybackRateFlag", n), e.target.blur()
}), W.push(V)
F = document.createElement("button"), F.innerHTML = "get快照", F.className = "mbvt_items", F.addEventListener("click", function() {
open("https://i0.hdslb.com/bfs/videoshot/" + unsafeWindow.cid + ".jpg", "_blank")
}), document.onkeydown = function(e) {
78 == e.keyCode && ("none" == u.style.display ? u.style.display = "block" : u.style.display = "none")
}, H = document.createElement("select"), H.className = "mbvt_items", H.addEventListener("change", function() {
var e, t = H.options[H.selectedIndex]
t.selected = 1, e = t.value, i("document.querySelector('.bui-select-item[data-value=\"" + e + "\"]').click()"), GM_setValue("qualifyFlag", e), unsafeWindow.vedio.dispatchEvent(new CustomEvent("myqualitychange"), {
detail: {
key: "v"
},
bubbles: !0,
cancelable: !0
})
}), R = document.createElement("select"), R.className = "mbvt_items", R.addEventListener("change", function() {
var e, t = R.options[R.selectedIndex]
t.selected = 1, e = t.value, GM_setValue("myScreenFlag", e), l(e)
}), d.append(H, m), v.append(b, p), g.append(E, w), f.append(R, N), q.append(L, S), x.append(M, F), unsafeWindow.count = 1,
function A() {
var t, n, i, l, c, o, r = document.querySelector(".bilibili-player-video-info")
if (!r) return unsafeWindow.count++, setTimeout(A, 1e3)
t = document.querySelector("video"), n = +GM_getValue("myScreenFlag", 1), a(), i = {
"default": 0,
"小屏": 0,
"web全屏": 1,
"全屏": 2
}, l = i.length
for (c in i) o = document.createElement("option"), o.innerText = c, o.value = i[c], o.value == n && (o.selected = 1), R.appendChild(o)
W.forEach(function(e) {
T.append(e), e.insertAdjacentText("afterend", e.value + "X")
}), document.querySelector("ul.bilibili-player-video-btn-menu").children.length && k.append(h, _), u.append(d, T, v, g, f, y, q, x, k), document.body.append(u), e(t, !0), unsafeWindow.count = 0
}(), I = function(e, t) {
var n
return ["webkit", "moz", "ms", "o", ""].forEach(function(i) {
if (!n) {
"" === i && (t = t.slice(0, 1).toLowerCase() + t.slice(1))
var l = _typeof(e[i + t])
l + "" != "undefined" && (n = "function" === l ? e[i + t]() : e[i + t])
}
}), n
}
}()