Bilibili Evolved V2 Evolved

增强 Bilibili Evolved V2 样式,请在安装 Bilibili Evolved V2 后再下载使用本脚本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name               Bilibili Evolved V2 Evolved
// @namespace          A user script about something
// @description        增强 Bilibili Evolved V2 样式,请在安装 Bilibili Evolved V2 后再下载使用本脚本
// @version            1.1.1
// @author             Tinhone
// @license            MIT
// @run-at             document-start
// @match              *://*.bilibili.com/*
// @grant              GM_addStyle
// @grant              GM_setValue
// @grant              GM_getValue
// @grant              GM_registerMenuCommand
// @compatible         firefox V50+
// @compatible         edge V50+
// @compatible         chrome V50+
// @icon               data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAMAAAAPdrEwAAAAAXNSR0IArs4c6QAAAnxQTFRFAAAAAP//AID/AKr/AL//AMz/ALb/AMb/AKr/ALP/ALn/AL//ALH/ALb/ALv/AKr/AK//ALT/ALj/ALP/ALb/ALH/ALj/ALP/ALb/AK3/ALD/ALL/AK3/AK//ALL/ALT/ALP/ALX/AK7/ALP/ALT/ALD/ALT/ALH/ALP/AK//ALH/ALL/ALH/ALL/AK//ALX/ALT/ALL/ALT/ALL/ALT/ALb/ALL/BLP/BLT/BLH/ALH/BLP/ALT/BLX/BLH/ALT/ALL/ALP/A7T/A7P/ALT/ALH/A7L/A7P/ALD/A7T/A7H/A7L/ALD/ALP/A7H/A7L/ALL/AK//ALP/A7D/ALT/A7H/A7P/ALL/ArP/ArL/ALL/ALP/ALH/ArL/ArD/ArL/ALH/ArH/ArP/ArL/ArH/ALL/ArP/ArH/ArL/ArP/ArH/ArT/ArP/ArH/ArL/ArL/ArP/ArL/ArH/ArL/ArP/ArL/ArP/ArH/ArH/ArL/ArH/ArL/ArL/ArL/ArP/ArP/ArL/ArP/ArH/ArL/ArL/ArP/ArL/ArP/ArL/AbH/AbP/AbH/AbP/AbL/AbL/AbP/AbL/AbL/AbL/AbL/AbL/AbH/AbL/AbL/AbP/AbL/AbL/AbH/AbL/AbP/AbP/AbL/AbL/AbL/AbH/AbL/AbL/AbP/AbL/AbH/AbL/AbL/AbP/AbL/AbL/AbP/AbL/AbH/AbL/AbP/AbL/AbL/AbH/AbL/AbL/AbP/AbH/AbL/AbL/AbL/AbL/AbL/AbP/AbL/AbL/AbH/AbL/AbL/AbP/AbL/AbL/AbL/AbP/AbL/AbL/AbP/AbP/AbL/AbL/AbL/AbH/AbP/AbL/AbL/qs9g9wAAANN0Uk5TAAECAwQFBwkJCgsMDQ4PDxAREhQVFxkbHBwdHh8gISIlJiYoKSosLi8wMTI0NTY3Ojw9P0FCQkNERUVGR0hIS0xNTlFSUlZXV1hYWVpbXF1dXV5eX2JlZ2hqamxsbW5wc3V2eHl7fH1+f4CBg4OEhYeIiouNkZOTlJWXmJmcnZ6foKGio6WmqKmrrK2ur7CxsrO1tre4ubq7vcDCw8XGxsfIyMnLzM7P0NHT1NXX2Njb3N7g4+Tl5ubo6err7O3t7/Dx8/T09fb3+Pn6+/v8/f3+/q990IoAAAP2SURBVHja7daNV1NlHAfwnyPACTJKm0YBAuJ4FYUiU3yJAkpSy1TKTAvLkvClFEt71fCFjAqBIN2Ciia+NiAxluILAnNzuPn9h+Ru9zl3u2zj7t7rOR7PPufs7Nl3z/me5/zOvec8FBEhV1LBDJrEvHwtyfDKdQy+QaEk1tthTKKwxV0G4HiNgtM2AUANhW0mOENrKZjYBnBOUPjavN0bgk4DHOfrFL5Z58CxVwVuboTHJyRHigWcsQ1B5wzUkjzP9IJjWxdszqiZQjKlnwFnWHxu3WFwXLuiSLbZfeA4N5KvBP7Mu0iJmT3gjGwKMOfdmjC7sgyCzPy8anjYPjDk8P/Mb4SHZWlmTrYha57BKyeDQpiy7Ms+O+SyD7StTaDAkpug1LkyCqTsCpRz746mCUpGoIovNCSSZ4dKashf7FmoxTaf/LwL9bSTL20PmKvmX0+0NDe3jn+aW9u8Wps9hN9szbS0/j4AMM+Sj1fBnNKTPNP2ucH7hXz8yNLuOJJtD3j9OiHUDLB0Ick3/X/wioUwjWXnHyMF9oK3XsiKWHaUlKgE730hW8SyQ6REBXh7hWwpy74jJcrBaxCyJSyrJyVWgtckZMtY9i0psRq8nx/h6vj88s9XkVjU19tLc2PkV8cXrt9vtgG4QGJzAMD6W11lVky41dqF1YdMVpbejieR5WD6jd9XZOskV7934Q78LCCRWvixn86VWH0SIutIpAUiqyVW74TIPhLpg0i2xOpK+LpuPDBhIG8d/8cJH1e0EqvngGft/KrMEEcBPVWw+SfzLXj9SRKrNaO4e6ljZ0VhAk3iyeKqevMN4LDUaip6KYWkm75kjf4he9Ej1ZFq6dWJLdkPqno7/opWtzpmS1cxjSsYBXbQuFkn6/TqVNcBl18myrsEwLYxilIvAn+rU714BLhnbB+GR3fbNQCfKaxmKofgMfoDuywfiFZazSwwugFYSimjnVv8+45GxSdk0ZaPSnU0rnDrtvIZcp6Qg+rcrxuF7AWWfaPO/fq4kD2vzqlXBphrMcuOkBKrwNsqZKkuePVGkwL7wXuTBBdZuJjk01nByyVBPQstiSocejCOBGVgTueQPI8fdIJ3jHxoe8EM9XSZOkwmU0dnZ6fomyNa8051nL8JxpXnf4mDatihmZg/oJbhueQv8yZUspnEigahhrHaKJqgpB/K2T6kQPRHnFDozHMURMGnZ68BbgjcbpfD4XCOTeS6B7997quWoytiKYRpKanpGQ3wcr6YrE+mIJ5ITzvGBlySlvR0eNeg/yi0NfCykmTabnDubqLQpnZ591WTdLPNABx7aDLclQT2HRSOqSs+fnuulH3Lt1WlUkTEQ+Y+Vr/GXkzvGcwAAAAASUVORK5CYII=
// ==/UserScript==

(function () {
    'use strict'

    GM_addStyle(`
        /********** Bilibili Evolved 顶栏更新 **********/

        /* 减小高度 */
        :root {
            --navbar-height: 36px !important;
        }

        /* 原版顶栏高度适配,#biliMainHeader 重复是为了 CSS 优先级 */
        body > #biliMainHeader#biliMainHeader,
        #app > #biliMainHeader#biliMainHeader {
            height: initial !important;
            max-height: initial !important;
            min-height: var(--navbar-height) !important;
        }

        /* 美化一级元素上的消息数量提示 */
        .custom-navbar-items > .custom-navbar-item > .notify-count {
            font-size: 7pt !important;
            line-height: 10px !important;
        }

        /* 美化一级元素字体大小 */
        .custom-navbar-items > .custom-navbar-item > .main-content {
            font-size: 9pt !important;
        }

        /* 美化当页面为对应一级元素时的字体大小 */
        .custom-navbar-items > .custom-navbar-item.active > .main-content {
            font-size: 9.5pt !important;
        }

        /* 美化搜索框 */
        .custom-navbar-items > .custom-navbar-item[data-name=search] .launch-bar {
            border-radius: 4px !important;
            height: 23px !important;
        }

        /* 美化搜索框右箭头图标 */
        .custom-navbar-items > .custom-navbar-item[data-name=search] .launch-bar .be-icon.be-iconfont-right-arrow {
            --size: 15px !important;
        }

        /* 缩小头像大小,调整头像动画 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo] .user-face-container {
            height: calc(var(--navbar-height) - 12px);
            width: calc(var(--navbar-height) - 12px);
            transition: transform 230ms cubic-bezier(0, 0.3, 0.3, 0.95) 0.2s;
            z-index: 100;
        }

        /* 头像框偏移适配-头像 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo] .user-face-container .user-face {
            transform: initial;
            z-index: initial;
            opacity: initial;
        }

        /* 头像框偏移适配-头像框 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo] .user-face-container .user-pendant {
            transform: translate(-50%, -50%);
            left: 50%;
            top: 50%;
            z-index: initial;
            opacity: 0;
        }

        /* 头像框偏移适配-头像和头像框 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo]:hover .user-face-container {
            transform: scale(2) translateY(10px);
        }

        /* 头像框偏移适配-头像 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo]:hover .user-face-container .user-face {
            transform: initial;
            z-index: initial;
            opacity: initial;
        }

        /* 头像框偏移适配-头像框 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo]:hover .user-face-container .user-pendant {
            transform: translate(-50%, -50%);
            z-index: initial;
            opacity: 1;
        }

        /* 缩小昵称和头像间隔 */
        .custom-navbar-items > .custom-navbar-item[data-name=userInfo] .user-info-panel > .logged-in > .name {
            margin: calc(var(--navbar-height) * 0.5 + 37px) 0 0 0 !important;
        }

        /* 美化“消息”二级菜单的消息数量提示 */
        .custom-navbar-items > .custom-navbar-item[data-name=messages] .messages-popup > .message-entry > a::after {
            padding: 3px 8px !important;
        }

        /* 美化“投稿”字体大小 */
        .custom-navbar-items > .custom-navbar-item[data-name=upload] .navbar-upload > .navbar-upload-name {
            font-size: 9.5pt !important;
        }

        /* 美化“投稿”图标大小 */
        .custom-navbar-items > .custom-navbar-item[data-name=upload] .navbar-upload > .be-icon.be-iconfont-upload {
            --size: 15px !important;
        }

        /* 告知浏览器变化 */
        .custom-navbar-items:hover > .custom-navbar-item {
            will-change: background-color !important;
        }

        /* 告知浏览器变化 */
        .custom-navbar-items:hover > .custom-navbar-item > .popup-container {
            will-change: top !important;
        }

        /* 告知浏览器变化 */
        .custom-navbar-items:hover > .custom-navbar-item > .popup-container > .popup.no-padding {
            will-change: opacity !important;
        }

        /* 告知浏览器变化 */
        .custom-navbar-items:hover > .custom-navbar-item .launch-bar {
            will-change: opacity !important;
        }

        /* 告知浏览器变化 */
        .custom-navbar-items:hover > .custom-navbar-item .launch-bar-suggest-list {
            will-change: opacity, transform !important;
        }


        /********** Bilibili Evolved 侧栏更新 **********/

        /* 组件详情面板 */
        .be-settings > .settings-panel-popup > .settings-panel .component-detail-panel {
            height: calc(100% + 1px) !important;
            border-radius: 0px 8px 8px 0px !important;
        }

        .be-settings > .settings-panel-popup > .settings-panel .component-detail > .component-detail-description {
            padding-bottom: 64px !important;
        }

        /* 功能栏按钮 */
        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .be-button:not(.be-check-box) {
            border-radius: 8px !important;
            padding: 8px 12px 8px 8px !important;
            box-shadow: none !important;
            border: 2px solid rgba(136, 136, 136, 0.2) !important;
            outline: 0px solid var(--theme-color-20) !important;
            transition: 0.2s all ease-out !important;
        }

        /* 功能栏按钮 */
        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .be-button:not(.be-check-box):active:focus-within {
            box-shadow: none !important;
            border: 2px solid var(--theme-color) !important;
            outline: 3px solid var(--theme-color-20) !important;
        }

        /* 功能栏按钮 */
        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .be-button:not(.be-check-box):hover {
            box-shadow: none !important;
            border: 2px solid var(--theme-color) !important;
        }

        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .bvid-convert.widget-item {
            border-radius: 8px !important;
            padding: 8px 8px 8px 11px !important;
            line-height: 20px !important;
            box-shadow: none !important;
            border: 2px solid rgba(136, 136, 136, 0.2) !important;
        }

        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .be-dev-client.widget-item {
            border-radius: 8px !important;
            padding: 8px 8px 8px 11px !important;
            line-height: 20px !important;
            box-shadow: none !important;
            border: 2px solid rgba(136, 136, 136, 0.2) !important;
        }

        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items .multiple-widgets {
            gap: 10px !important;
        }

        .be-settings > .widgets-panel-popup > .widgets-panel .widget-items {
            gap: 10px !important;
        }


        /********** 旧版评论区更新 **********/

        /* 禁止评论区里的头像框动画 */
        .bb-comment .bili-avatar-pendent-dom > .bili-avatar-img {
            -webkit-animation: none !important;
            -moz-animation: none !important;
            -o-animation: none !important;
            animation: none !important;
        }

        /* 美化[回复]按钮 */
        .bb-comment .info > .reply.btn-hover {
            height: 16px !important;
            padding-top: 2px !important;
            padding-bottom: 2px !important;
        }

        /* 禁止顶部横幅 */
        .bb-comment .reply-notice {
            display: none !important;
        }

        /* 隐藏底部回复栏 */
        .bb-comment .comment-send-lite {
            display: none !important;
        }


        /********** 新版评论区更新 **********/

        /* 禁止顶部横幅 */
        .bili-comment .reply-notice {
            display: none !important;
        }

        /* 隐藏底部回复栏 */
        .bili-comment > .comment-container > .reply-warp > .fixed-reply-box {
            display: none !important;
        }


        /********** 旧版动态首页更新 **********/

        /* 隐藏在新版入口旁边闪烁的提示 */
        .bili-dyn-version-control > .bili-dyn-version-control__reminding {
            display: none !important;
        }


        /********** 旧版动态更新 **********/

        /* 增加动态卡片宽度 */
        #app > .content {
            width: 930px !important;
        }

        /* 增加动态卡片宽度 */
        #app > .content .bili-dyn-item__body > .bili-dyn-content {
            width: 830px !important;
        }

        /* 增加动态卡片中包含的转发动态宽度 */
        #app > .content .bili-dyn-item__body .bili-dyn-content__orig__major {
            width: 818px !important;
        }

        /* 增加动态卡片中包含的转发动态宽度 */
        #app > .content .bili-dyn-item__body .bili-dyn-content__orig__additional {
            width: 818px !important;
        }

        /* 改为适合的鼠标指针样式 */
        #app > .content .bili-dyn-content__orig > .bili-dyn-content__orig__desc {
            cursor: auto !important;
        }


        /********** 新版动态更新 **********/

        /* 增加动态卡片宽度 */
        #app > .opus-detail {
            width: 930px !important;
        }

        /* 增加右侧边栏 margin 距离 */
        #app > .opus-detail > .right-sidebar-wrap {
            margin-left: 942px !important;
        }


        /********** 消息中心更新 **********/

        /* 面板高度适配 */
        #message-navbar ~ .container {
            --animation-start: 300ms ease-out;
            --animation-end: 100ms ease-in;
            height: calc(100vh - var(--navbar-height)) !important;
            margin-top: var(--navbar-height) !important;
        }

        /* 面板高度适配 */
        #message-navbar ~ .container > #link-message-container > .container {
            height: 100% !important;
        }

        /* 面板右侧高度适配,height 随便填一个是 px 的值,剩下交给 flex-grow */
        #message-navbar ~ .container > #link-message-container .space-right-bottom.ps {
            height: 0px !important;
            flex-grow: 1 !important;
        }

        /* 面板右侧高度适配 */
        #message-navbar ~ .container > #link-message-container .space-right-bottom.ps > .router-view > .d {
            --space-right-top-height: 42px;
            --padding: 10px;
            height: calc(100vh - var(--navbar-height) - var(--space-right-top-height) - var(--padding) * 3) !important;
        }

        /* 面板左侧消息提醒优化 */
        #message-navbar ~ .container > #link-message-container .space-right-bottom.ps > .router-view > .d .list-item > .notify {
            background-color: var(--theme-color) !important;
        }

        /* 面板左侧消息提醒数字优化 */
        #message-navbar ~ .container > #link-message-container .space-right-bottom.ps > .router-view > .d .list-item > .notify-number {
            padding: 1px 7px !important;
            font-size: 8px !important;
            line-height: 10px !important;
            border-radius: 5px !important;
            width: initial !important;
            height: initial !important;
            right: 9px !important;
        }

        /* 面板左侧消息提醒圆点优化 */
        #message-navbar ~ .container > #link-message-container .space-right-bottom.ps > .router-view > .d .list-item > .notify-dot {
            width: 7px !important;
            height: 7px !important;
            top: 22px !important;
            right: 10px !important;
        }


        /* 面板左侧优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list {
            display: flex !important;
            flex-direction: column !important;
            align-items: center !important;
            padding-left: 0 !important;
        }

        /* 面板左侧优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item {
            width: 100% !important;
            justify-content: center !important;
            transition: color var(--animation-end) !important;
        }

        /* 面板左侧优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item::before {
            display: none !important;
        }

        /* 面板左侧优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item > a {
            display: flex !important;
            width: 100% !important;
            height: 100% !important;
            flex: initial !important;
            -webkit-box-flex: initial !important;
            -ms-flex: initial !important;
            flex-direction: row !important;
            gap: 5px !important;
            padding-left: 0 !important;
            line-height: 12px !important;
            align-items: center !important;
            justify-content: center !important;
            transition: inherit;
        }

        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item:hover,
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item.active,
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item:hover > a,
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item.active > a {
            cursor: pointer;
            color: var(--theme-color) !important;
            transition: color var(--animation-start) !important;
        }

        /* 面板左侧消息提醒优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item > a > .notify {
            display: inline-block !important;
            position: static !important;
            margin-right: -4px !important;
            background-color: var(--theme-color) !important;
            margin-top: 1px !important;
            top: 0 !important;
            right: 0 !important;
        }

        /* 面板左侧消息提醒数字优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item > a > .notify-number {
            padding: 1px 8px !important;
            font-size: 10px !important;
            line-height: 12px !important;
            border-radius: 6px !important;
            width: initial !important;
            height: initial !important;
        }

        /* 面板左侧消息提醒圆点优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .list > .item > a > .notify-dot {
            width: 7px !important;
            height: 7px !important;
        }

        #message-navbar ~ .container > #link-message-container .side-bar > .divided-line {
            display: none !important;
        }

        /* 面板左侧“消息设置”优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item {
            flex-direction: column !important;
            margin-top: 18px !important;
            padding-left: 0 !important;
            transition: color var(--animation-end) !important;
        }

        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item > a {
            width: 100% !important;
            text-align: center !important;
            transition: inherit !important;
        }

        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item:hover,
        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item.active,
        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item:hover > a,
        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item.active > a {
            cursor: pointer !important;
            color: var(--theme-color) !important;
            transition: color var(--animation-start) !important;
        }

        /* 面板左侧“消息中心”“消息设置”图标优化 */
        #message-navbar ~ .container > #link-message-container .side-bar > .title > .air-craft,
        #message-navbar ~ .container > #link-message-container .side-bar > .setting.item > a > .setting-icon {
            margin-right: 8px !important;
        }
    `)

    if (GM_getValue('isAdjustFreshHome') === undefined) {
        GM_setValue('isAdjustFreshHome', false)
    }

    if (GM_getValue('isAdjustFreshHome') && window.location.href === 'https://www.bilibili.com/') {
        const callback = (mutationList, observer) => {
            for (let i = mutationList.length - 1; i >= 0; --i) {
                const mutation = mutationList[i]
                if (mutation.target.nodeName !== 'BODY') {
                    continue
                }
                Object.defineProperty(mutation.target, 'scrollHeight', {
                    value: 100000,
                    writable: false,
                });
                observer.disconnect()
                break
            }
        }

        const target = document.childNodes[1]

        const options = {
            subtree: true,
            childList: true,
        }

        const theObserver = new MutationObserver(callback)
        theObserver.observe(target, options)
    }

    const deleteOld = () => {
        window.alert('请删除那个没有菜单选项的同名老脚本,原因是可能会导致功能冲突')
    }
    const openBilibiliEvolvedHomePage = () => {
        window.open('https://github.com/the1812/Bilibili-Evolved', '_blank')
    }

    GM_registerMenuCommand('请删除那个没有菜单选项的同名老脚本,原因是可能会导致功能冲突', deleteOld)
    GM_registerMenuCommand('访问 Bilibili Evolved 仓库主页', openBilibiliEvolvedHomePage)
})()