diff --git a/README.md b/README.md index 44d1e59b1..a2b88b0c4 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ - 夜间模式计划时段: `关闭` - 起始时间: `18:00` - 结束时间: `6:00` +- 首页紧凑布局: `关闭` - 搜索栏置顶: `开启` - 显示顶部横幅: `开启` - 显示排行榜图标: `开启` @@ -54,8 +55,6 @@ - 缩放直播看板娘: `开启` - 删除直播水印: `开启` - 删除视频标题层: `关闭` -- 强制宽屏: `关闭` - - 触发宽度: `1368px` ### 工具 - 删除广告: `开启` - 稍后再看重定向: `开启` @@ -153,6 +152,12 @@ #### 夜间模式计划时段 设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式. > 结束时间小于起始时间时将视为次日, 如`18:00`至`6:00`表示晚上18:00到次日6:00. +### 首页使用紧凑布局 +设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 番剧的图片和排名序号会变成圆形, 分区栏的图标会使用高清重制版. +#### 启用前 +![原版布局](images/compact-layout-disabled.png) +#### 启用后 +![紧凑布局](images/compact-layout.png) ### 搜索栏置顶 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示. 仅对常用页面有效, 部分页面可能会有点布局错乱. #### 启用前 @@ -188,15 +193,6 @@ 标题覆盖层的位置: ![标题覆盖层](images/remove-top-mask.png) -### 强制宽屏 -对主站强制使用宽屏样式, 将在宽度达到`1300px`时启用. 此功能的适用范围为屏幕宽度介于`1300px`至`1400px`的设备. -> 原有的宽屏样式会在宽度超过`1400px`时自动启用, 如果你的屏幕宽度大于`1400px`, 则没有必要开启此功能. - -> 非宽屏样式下, 首页视频排行为2行**3**列; 宽屏样式下, 首页视频排行为2行**4**列. -#### 启用前 -![默认布局](images/force-wide-before.png) -#### 启用后 -![宽屏布局](images/force-wide-after.png) ## 工具 ### 删除广告 diff --git a/bilibili-evolved.offline.user.js b/bilibili-evolved.offline.user.js index a6094d210..010e31494 100644 --- a/bilibili-evolved.offline.user.js +++ b/bilibili-evolved.offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Offline) -// @version 172.22 +// @version 172.24 // @description 增强哔哩哔哩Web端体验(离线版): 修复界面瑕疵, 删除广告, 使用夜间模式浏览; 下载视频,封面,弹幕, 以及增加对触屏设备的支持等. // @author Grant Howard, Coulomb-G // @copyright 2018, Grant Howrad (https://github.com/the1812) @@ -39,7 +39,6 @@ touchVideoPlayer: false, customControlBackgroundOpacity: 0.64, customControlBackground: true, - forceWide: false, darkScheduleStart: "18:00", darkScheduleEnd: "6:00", darkSchedule: false, @@ -88,6 +87,7 @@ useDefaultPlayerMode: true, useDefaultPlayerLayout: true, about: false, + forceWide: false, latestVersionLink: "https://github.com/the1812/Bilibili-Evolved/raw/master/bilibili-evolved.offline.user.js", currentVersion: GM_info.script.version, }; @@ -191,9 +191,6 @@ path: "min/blur-video-control.min.css", order: 20, }, - forceWideStyle: { - path: "min/force-wide.min.css", - }, downloadVideoStyle: { path: "min/download-video.min.css", }, @@ -439,20 +436,6 @@ darkScheduleEnd: "结束时间", }, }, - forceWide: { - path: "min/force-wide.min.js", - styles: [ - { - key: "forceWideStyle", - important: true, - condition: () => true, - }, - ], - displayNames: { - forceWide: "强制宽屏", - forceWideMinWidth: "触发宽度", - }, - }, clearCache: { path: "min/clear-cache.min.js", displayNames: { @@ -1075,7 +1058,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/image-viewer.min.css"] = `html.image-viewer-opened,body.image-viewer-opened{overflow:hidden!important;}.image-viewer-container{background:rgba(0,0,0,0.85);width:100%;height:100%;position:fixed;top:0;left:0;z-index:100000;display:none;justify-content:center;align-items:center;}.image-viewer-container.opened{display:flex;}.image-viewer{width:90%;height:90%;display:grid;grid-template-columns:auto 48px;grid-template-rows:48px auto 48px;grid-template-areas:"image close" "image ." "image download";grid-column-gap:12px;justify-items:center;justify-content:stretch;align-items:center;align-content:stretch;}.image-viewer .image{grid-area:image;width:auto;height:auto;max-width:100%;max-height:100%;}.image-viewer .close{grid-area:close;}.image-viewer .download{grid-area:download;}.image-viewer-icon{cursor:pointer;width:100%;height:100%;}.image-viewer-icon svg{max-width:48px;max-height:48px;}.image-viewer-icon path{fill:#eee;transition:all 0.2s;transform-origin:center;}.image-viewer-icon:hover path{fill:var(--theme-color);transform:scale(1.2);}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/toast.min.css"] = `.toast-card-container{position:fixed;left:16px;bottom:16px;display:flex;flex-direction:column;align-items:start;z-index:100001;}.toast-card{background:#fff;min-width:240px;max-width:60vw;min-height:0;max-height:0;box-shadow:0 4px 16px 1px rgba(0,0,0,.3);transition:all .3s cubic-bezier(0,0.65,0.58,1);transform:translateX(-150%);transform-origin:left;overflow:hidden;display:flex;flex-direction:column;border-left-width:4px;border-left-style:solid;}.toast-card.visible{min-height:96px;max-height:unset;transform:translateX(0);margin-top:16px;}.toast-card-header{display:flex;align-items:center;}.toast-card-title{font-size:18px;color:#000;opacity:0.5;margin:16px;font-weight:bold;flex:1 1 auto;}.toast-card-dismiss{height:24px;width:24px;flex:0 0 auto;padding:16px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:all .2s ease-out;transform-origin:center;opacity:0.5;}.toast-card-dismiss:hover{transform:scale(1.2);}.toast-card-dismiss:active{transform:scale(1.1);}.toast-card-message{color:#000;font-size:14px;margin:16px;margin-top:0;white-space:pre-wrap;}.toast-card.toast-default{border-left-color:#444;}.toast-card.toast-error{border-left-color:#f44336;}.toast-card.toast-info{border-left-color:#2196F3;}.toast-card.toast-success{border-left-color:#8BC34A;}.toast-card span,.toast-card .link{display:inline-block;padding:4px 6px;margin:0 2px;background-color:rgba(0,0,0,.1);text-decoration:none;color:#000;transition:all .2s ease-out;}.toast-card .link:hover{background-color:rgba(0,0,0,.2);}.toast-card .link:active{background-color:rgba(0,0,0,.1);}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.css"] = `@supports (backdrop-filter: blur(48px)) or (-webkit-backdrop-filter: blur(48px)){.video-control-blur-layer{width:100%;height:100%;position:absolute;-webkit-backdrop-filter:blur(48px);backdrop-filter:blur(48px);z-index:-1;top:0;}.bilibili-player-video-control-mask{background:transparent!important;}.bilibili-player-video-control-bottom,.bui-slider .bui-track.bui-track-video-progress .bui-bar-wrap{background-color:transparent!important;}.bilibili-player-video-control-bottom{position:relative;}.bilibili-player-area .bilibili-player-video-control-wrap,.bilibili-player-area .bilibili-player-video-control-bottom{transition:none!important;}}`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/force-wide.min.css"] = `@media screen and (min-width: 1300px){.bili-wrapper{width:1160px;}.bili-wrapper .l-con{width:900px;}.bili-header-m .bili-wrapper{width:1160px;}.bili-header-m .bili-wrapper .l-con{width:900px;}.gg-floor-module{width:1160px;max-height:96px;}.bangumi-timing-module .headline .bili-tab{width:650px;}.bangumi-timing-module .headline .bili-tab .bili-tab-item{width:70px;}.bangumi-timing-module .card-timing:first-child:nth-child(4),.bangumi-timing-module .card-timing:nth-child(2):nth-child(4),.bangumi-timing-module .card-timing:nth-child(3):nth-child(4),.bangumi-timing-module .card-timing:nth-child(4):nth-child(4){padding-top:0;}.bangumi-timing-module .card-timing{padding:36px 34px 0 0;}.audio-list .song-list .song-li:nth-child(5n) .content .text{margin-right:0;}.audiolist-list .song-list .song-li:nth-child(5n) .content .text{margin-right:0;}.elevator-module{margin-left:590px;}#primary_menu,#primary_menu>ul.nav-menu,.uns_box li.u-i.b-post{display:flex;align-items:center;justify-content:space-between;}.primary-menu{width:100%;}.primary-menu .nav-menu{flex-grow:1;}.primary-menu .nav-gif{position:static;margin-left:2%;}.primary-menu .nav-menu>li{margin-right:0!important;}.primary-menu .nav-menu>li.home{padding-right:1%;}}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video-panel.opened{transform:scaleY(1);}.download-video-panel{position:absolute;top:calc(100% + 2px);transition:all .16s ease-out;transform-origin:top;transform:scaleY(0);background:white;box-shadow:0px 3px 20px 2px #0004;z-index:100;}ol.video-quality li,.video-action>div{cursor:pointer;align-items:center;margin:0;padding:8px 16px;transition:all .2s ease-out;text-align:center;}.video-action>div{padding:12px 24px;}ol.video-quality li:hover,.video-action>div:hover{background:rgba(0,0,0,0.16);}.video-quality,.video-progress,.video-action,.video-error{display:none;}.download-video-panel.quality:not(.error) .video-quality,.download-video-panel.progress:not(.error) .video-progress,.download-video-panel.action:not(.error) .video-action,.download-video-panel.error .video-error{display:block;}.download-progress-text{display:flex;}.download-progress-background{background-color:#8884;height:4px;width:100%;margin-top:4px;}.download-progress-foreground{background-color:var(--theme-color);transform-origin:left;transition:all .2s ease-out;transform:scaleX(0);height:100%;width:100%;}.download-progress-cancel{margin-top:8px;display:flex;justify-content:center;}.download-progress-cancel>span{background-color:#8884;padding:4px 8px;cursor:pointer;}.download-progress-cancel>span:hover{opacity:.9;}.download-progress-cancel>span:active{opacity:.8;}.video-error,.video-progress{padding:12px;}.video-progress{min-width:120px;}#video-complete{display:none;}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/gui-settings.min.html"] = `
附加功能
设置
`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/image-viewer.min.html"] = `
`; @@ -1086,7 +1068,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/text-validate.min.js"] = (()=>{return(t,e)=>{class i{constructor(t){this.key=t}get originalValue(){return t[this.key]}static getValidator(t){switch(t){case"customStyleColor":return new r(t);case"blurBackgroundOpacity":case"customControlBackgroundOpacity":return new a(t);case"defaultPlayerMode":case"defaultVideoQuality":return new s(t);case"darkScheduleStart":case"darkScheduleEnd":return new n(t);default:return new i(t)}}isValidate(t){return t}validate(t){const e=this.isValidate(t);if(e===undefined){return this.originalValue}return e}}class r extends i{isValidate(t){if(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(t)){if(t.length<7){return`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`}else{return t}}}}class a extends i{isValidate(t){if(/^([-\+]?\d+)(\.\d+)?$/.test(t)){const e=parseFloat(t);if(e>=0&&e<=1){return t}}}}class s extends i{isValidate(t){const[e]=Object.values(Resource.manifest).filter(t=>t.dropdown&&t.dropdown.key===this.key).map(t=>t.dropdown);if(e.items.indexOf(t)!==-1){return t}}}class n extends i{isValidate(t){const e=t.match(/^([\d]{1,2}):([\d]{1,2})$/);if(e&&e.length>=3){const t={hour:parseInt(e[1]),minute:parseInt(e[2])};(function(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}).call(t);return`${t.hour}:${t.minute<10?"0"+t.minute:t.minute}`}}}return{export:{Validator:i,ColorValidator:r,DropDownValidator:s,OpacityValidator:a,TimeValidator:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/theme-colors.min.js"] = (()=>{return(e,o)=>{const r={red:"#e57373",pink:"#F06292",purple:"#BA68C8",deepPurple:"#9575CD",indigo:"#7986CB",blue:"#2196F3",lightBlue:"#00A0D8",cyan:"#00ACC1",teal:"#26A69A",green:"#81C784",lightGreen:"#9CCC65",orange:"#FF9800",deepOrange:"#FF7043",brown:"#A1887F",grey:"#757575",blueGrey:"#78909C"};class t{constructor(){this.reloadColor=(()=>{const e=document.querySelector("html");return function(o){const r=new ColorProcessor(o);const t=e=>r.rgbToString(r.hexToRgba(e));const l=r.hexToRgba(o+"70");$("div.custom-color-preview").css("background",o).css("box-shadow",`0px 2px 8px 1px rgba(${l.r},${l.g},${l.b},${l.a})`);e.style.setProperty("--theme-color",o);for(let r=10;r<=90;r+=10){e.style.setProperty(`--theme-color-${r}`,t(o+r))}e.style.setProperty("--foreground-color",r.foreground);e.style.setProperty("--foreground-color-b",t(r.foreground+"b"));e.style.setProperty("--foreground-color-d",t(r.foreground+"d"));e.style.setProperty("--blue-image-filter",r.blueImageFilter);e.style.setProperty("--pink-image-filter",r.pinkImageFilter);e.style.setProperty("--brightness",r.brightness);e.style.setProperty("--invert-filter",r.filterInvert)}})()}setupDom(){$(`input[key='customStyleColor']`).on("change",()=>{this.reloadColor($(`input[key='customStyleColor']`).val())});const e=$(".predefined-colors-grid");for(const o of Object.values(r)){$(`
`).appendTo(e).css("background",o).attr("data-color",o).on("click",e=>{const o=$(e.target).attr("data-color");$(`input[key='customStyleColor']`).val(o).trigger("input").change();$("div.custom-color-preview").on("click")})}$("div.custom-color-preview").on("click",()=>{const e=$(".predefined-colors");e.toggleClass("opened")})}}return{export:t}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.css"] = `.gui-settings-tooltip{position:fixed;left:420px;color:white;background:#0008;padding:1rem;font-size:12pt;top:50%;transform:translateY(-50%);transition:all .2s ease-out .8s;opacity:0;min-width:100%;max-height:60%;line-height:24px;white-space:pre-wrap;pointer-events:none;}.gui-settings-tooltip.show{pointer-events:initial;opacity:1;}.gui-settings-tooltip span{font-weight:bold;}`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.js"] = (()=>{return(n,a)=>{const e={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,forceWide:`对主站强制使用宽屏样式, 将在宽度达到1300px时启用. 此功能的适用范围为屏幕宽度介于1300px1400px的设备.\n原有的宽屏样式会在宽度超过1400px时自动启用, 如果你的屏幕宽度大于1400px, 则没有必要开启此功能.\n非宽屏样式下, 首页视频排行为2行3列; 宽屏样式下, 首页视频排行为2行4列.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(n){const a=$(n).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const n=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const s=e[t(a)];if(s!==undefined){n.innerHTML=s;n.classList.add("show")}});a.addEventListener("mouseout",()=>{n.classList.remove("show")})})})();return{export:e}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.js"] = (()=>{return(e,a)=>{const n={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(e){const a=$(e).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const e=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const o=n[t(a)];if(o!==undefined){e.innerHTML=o;e.classList.add("show")}});a.addEventListener("mouseout",()=>{e.classList.remove("show")})})})();return{export:n}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-search.min.js"] = (()=>{return(t,e)=>{const s=e.attributes.settingsTooltip.export;class i{constructor(){this.input=document.querySelector(".gui-settings-search");const t=[...document.querySelectorAll(".gui-settings-content>ul>li")];const e=t=>e=>e.classList.contains("category")===t;this.categories=t.filter(e(true));this.items=t.filter(e(false));this.input.addEventListener("input",()=>this.keywordChange())}keywordChange(){const t=this.input.value.trim();if(!t){this.categories.concat(this.items).forEach(t=>t.classList.add("folded"));return}this.items.forEach(e=>{const i=$(e).find("input").attr("key");const n=e.innerText+s[i].replace(/|<\/span>/g,"");if(n.includes(t)){e.classList.remove("folded")}else{e.classList.add("folded")}});this.foldCategories()}foldCategories(){for(const e of this.categories){function t(){let t=e.nextElementSibling;while(t!==null&&!t.classList.contains("category")){if(!t.classList.contains("folded")){return"remove"}t=t.nextElementSibling}return"add"}e.classList[t()]("folded")}}}return{export:i}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/gui-settings.min.js"] = (()=>{return(e,t)=>{const n=t.attributes.textValidate.export.Validator;const i=t.attributes.settingsSearch.export;const s=t.attributes.themeColors.export;const o=new s;const a=t.data.guiSettingsDom.text;function c(e){let t=e.nextElementSibling;const n=[];while(t!==null&&!t.classList.contains("category")){n.push(t);t=t.nextElementSibling}return n}function r(e,t){$(`input[type='checkbox'][key='${e}']`).prop("checked",t);$(`input[type='text'][key='${e}']`).val(t)}function u(){for(const[t,n]of Object.entries(e)){r(t,n)}}function l(){$(".gui-settings-mask").on("click",()=>{$(".gui-settings-widgets-box,.gui-settings-box,.gui-settings-mask").removeClass("opened")});$("input[type='text'][key]").each((t,n)=>{$(n).attr("placeholder",e[$(n).attr("key")])});$(".gui-settings-content ul li.category").on("click",e=>{const t=document.querySelector(".gui-settings-search");if(t.value!==""){t.value="";raiseEvent(t,"input")}e.currentTarget.classList.toggle("folded");c(e.currentTarget).forEach(e=>e.classList.toggle("folded"))});$(".gui-settings-dropdown>input").on("click",e=>{$(e.currentTarget).parent().toggleClass("opened")});onSettingsChange((t,n,i)=>{if(e[t]!==i){e[t]=i;$(`input[type='checkbox'][key='${t}']`).prop("checked",i).change();$(`input[type='text'][key='${t}']`).val(i).change()}})}function p(){const t=e=>{};$("input[type='checkbox'][key]").each((n,i)=>{$(i).on("change",()=>{const n=i.getAttribute("key");const s=i.checked;e[n]=s;t(n);saveSettings(e)})});$("input[type='text'][key]").each((i,s)=>{$(s).on("change",()=>{const i=s.getAttribute("key");const o=n.getValidator(i).validate(s.value);e[i]=o;s.value=o;t(i);saveSettings(e)})})}function d(){const e={};$(`input[dependencies]`).each((t,n)=>{const i=$(n).attr("dependencies");if(i){e[$(n).attr("key")]=i}});const t=t=>{const n=t.prop("checked");for(const i in e){const s=e[i].split(" ");if(s.indexOf(t.attr("key"))!==-1){let e=true;if(n&&s.every(e=>$(`input[key='${e}']`).prop("checked"))){e=false}const t=$(`li:has(input[key='${i}'])`);const o=e?"addClass":"removeClass";t[o]("disabled");$(`input[key='${i}'][type='text']`).parent()[o]("disabled")}}};$(`input[type='checkbox'][key]`).on("change",e=>t($(e.target))).each((e,n)=>t($(n)))}function g(){if(typeof offlineData!=="undefined"){$("li:has(input[key=useCache])").addClass("disabled");$("input[key=useCache]").prop("disabled",true)}}function y(){$(".gui-settings-content ul li.category").each((e,t)=>{$(t).click()})}function k(){if(!CSS.supports("backdrop-filter","blur(24px)")&&!CSS.supports("-webkit-backdrop-filter","blur(24px)")){$("input[key=blurVideoControl]").prop("disabled",true);e.blurVideoControl=false;saveSettings(e)}if(window.devicePixelRatio===1){$("input[key=harunaScale]").prop("disabled",true);e.harunaScale=false;saveSettings(e)}}t.applyStyle("guiSettingsStyle");$("body").append(a);l();g();u();d();o.setupDom();p();y();k();new i;new SpinQuery(()=>$("body"),e=>e.length>0&&!(unsafeWindow.parent.window===unsafeWindow),e=>$(".gui-settings-icon-panel").css("display","none")).start()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-styles.min.js"] = (()=>{return(e,l)=>{if(e.useDarkStyle){l.applyStyle("scrollbarStyle");SpinQuery.any(()=>$(".custom-scrollbar"),e=>e.removeClass("custom-scrollbar"));if($("#banner_link").length===0||$("#banner_link").length>0&&e.overrideNavBar&&!e.showBanner){l.applyImportantStyle("darkStyleNavBar")}l.applyStyle("darkStyle");l.applyImportantStyle("darkStyleImportant")}else{l.removeStyle("scrollbarStyle");l.removeStyle("darkStyleNavBar");l.removeStyle("darkStyle");l.removeStyle("darkStyleImportant")}}})(); @@ -1108,7 +1090,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-top-mask.min.js"] = (()=>{return(i,n)=>{const l="bilibili-video-top-mask";if($(`#${l}`).length===0){n.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.js"] = (()=>{return(r,e)=>{(Observer.childListSubtree||Observer.subtree)("#bofqi",()=>{SpinQuery.count(()=>$(".bui-slider .bui-track.bui-track-video-progress,.bilibili-player-video-control-bottom"),2,r=>{if(!r.hasClass("video-control-blur-container")){r.addClass("video-control-blur-container");r.prepend(`
`)}})});e.applyStyle("blurVideoControlStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class s{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&0<=t&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let s=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){s=this.greaterThan(e)||this.lessThan(t)}const i=s||this.equals(e);return i}static millisecondsBefore(e){const t=new s;const i=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+i);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&i!==0){h+=24*3600*1e3}return h}}function i(){if(e.darkSchedule){const t=new s(e.darkScheduleStart);const r=new s(e.darkScheduleEnd);const n=new s;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h;saveSettings(e)}let u=0;if(h){u=s.millisecondsBefore(r)}else{u=s.millisecondsBefore(t)}if(u!==0){setTimeout(()=>i(),u)}}}i();return{export:s}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/force-wide.min.js"] = (()=>{return(e,t)=>{t.applyImportantStyle("forceWideStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/clear-cache.min.js"] = (()=>{return(n,c)=>{return{widget:{content:`\n \n \n 清除缓存\n `,condition:()=>typeof offlineData==="undefined",success:()=>{$("#clear-cache").on("click",()=>{n.cache={};saveSettings(n);Toast.success("已删除全部缓存.","清除缓存",5e3)})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined,isBangumi:false};const s=[];$(document).ajaxSend((e,t,n)=>{if(n.url.indexOf("https://bangumi.bilibili.com/player/web_api/v2/playurl")!==-1){s.unshift(n.url)}});class i{constructor(){this.menuPanel=document.querySelector(".download-video-panel");this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class o extends i{constructor(e){super(e);this.menuClasses=["action","progress"];this.currentMenuClass="action"}async getUrl(){const e=await SpinQuery.select(()=>s[0]).catch(()=>logError("获取番剧下载链接失败."));return e}}class r{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new l(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n;const o=i.accept_quality;const a=i.accept_format.split(",");const l=i.accept_description;const c=[];while(o.length>0){const e=new r(o.pop(),a.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class l{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(s=>{const i=new XMLHttpRequest;i.addEventListener("load",()=>{const s=JSON.parse(i.responseText.replace(/http:/g,"https:"));const o=s.data||s;if(!n.isBangumi&&o.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const r=o.durl;this.fragments=r.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});i.withCredentials=true;i.open("GET",s);i.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function c(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.isBangumi=true;n.entity=new o}else{n.entity=new i}return e!==undefined&&t!==undefined}async function d(){await c();const e=await r.availableFormats;let[s]=e;const i=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function o(){if(!s){return}n.entity.nextMenuClass();const e=await i();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const o=document.getElementById("video-complete");o.setAttribute("href",t.url);o.setAttribute("download",t.filename);o.click();const r=`下载完成. 再次保存`;Toast.success(r,"下载视频");n.entity.resetMenuClass()}async function a(){if(!s){return}const e=await i();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",o);$(".video-action>#video-action-copy").on("click",a);e.forEach(e=>{$(`
  • ${e.displayName}
  • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo("ol.video-quality")});t.applyStyle("downloadVideoStyle");const l=document.querySelector(".download-video-panel");const d=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!l.contains(e.target)){d()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:c,success:d}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(n,t)=>{const e=t.attributes.videoInfo.export.DanmakuInfo;async function a(n){const t=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new e((unsafeWindow||window).cid);await a.fetchInfo();const o=new Blob([a.rawXML],{type:"text/plain"});const i=URL.createObjectURL(o);const c=$("#danmaku-link");const d=c.attr("href");if(d){URL.revokeObjectURL(d)}clearTimeout(n);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${t}.xml`).attr("href",i).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let n=await SpinQuery.condition(()=>(unsafeWindow||window).cid,n=>n!==undefined);return n!==undefined},success:()=>{const n=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==n){const n=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);a(n)}})}}}}})(); diff --git a/bilibili-evolved.preview-offline.user.js b/bilibili-evolved.preview-offline.user.js index 15bfb5e10..630a0fb49 100644 --- a/bilibili-evolved.preview-offline.user.js +++ b/bilibili-evolved.preview-offline.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name Bilibili Evolved (Preview Offline) -// @version 172.22 +// @version 172.24 // @description 增强哔哩哔哩Web端体验(预览离线版): 修复界面瑕疵, 删除广告, 使用夜间模式浏览; 下载视频,封面,弹幕, 以及增加对触屏设备的支持等. // @author Grant Howard, Coulomb-G // @copyright 2018, Grant Howrad (https://github.com/the1812) @@ -39,7 +39,6 @@ touchVideoPlayer: false, customControlBackgroundOpacity: 0.64, customControlBackground: true, - forceWide: false, darkScheduleStart: "18:00", darkScheduleEnd: "6:00", darkSchedule: false, @@ -88,6 +87,7 @@ useDefaultPlayerMode: true, useDefaultPlayerLayout: true, about: false, + forceWide: false, latestVersionLink: "https://github.com/the1812/Bilibili-Evolved/raw/preview/bilibili-evolved.preview-offline.user.js", currentVersion: GM_info.script.version, }; @@ -191,9 +191,6 @@ path: "min/blur-video-control.min.css", order: 20, }, - forceWideStyle: { - path: "min/force-wide.min.css", - }, downloadVideoStyle: { path: "min/download-video.min.css", }, @@ -439,20 +436,6 @@ darkScheduleEnd: "结束时间", }, }, - forceWide: { - path: "min/force-wide.min.js", - styles: [ - { - key: "forceWideStyle", - important: true, - condition: () => true, - }, - ], - displayNames: { - forceWide: "强制宽屏", - forceWideMinWidth: "触发宽度", - }, - }, clearCache: { path: "min/clear-cache.min.js", displayNames: { @@ -1075,7 +1058,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/image-viewer.min.css"] = `html.image-viewer-opened,body.image-viewer-opened{overflow:hidden!important;}.image-viewer-container{background:rgba(0,0,0,0.85);width:100%;height:100%;position:fixed;top:0;left:0;z-index:100000;display:none;justify-content:center;align-items:center;}.image-viewer-container.opened{display:flex;}.image-viewer{width:90%;height:90%;display:grid;grid-template-columns:auto 48px;grid-template-rows:48px auto 48px;grid-template-areas:"image close" "image ." "image download";grid-column-gap:12px;justify-items:center;justify-content:stretch;align-items:center;align-content:stretch;}.image-viewer .image{grid-area:image;width:auto;height:auto;max-width:100%;max-height:100%;}.image-viewer .close{grid-area:close;}.image-viewer .download{grid-area:download;}.image-viewer-icon{cursor:pointer;width:100%;height:100%;}.image-viewer-icon svg{max-width:48px;max-height:48px;}.image-viewer-icon path{fill:#eee;transition:all 0.2s;transform-origin:center;}.image-viewer-icon:hover path{fill:var(--theme-color);transform:scale(1.2);}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/toast.min.css"] = `.toast-card-container{position:fixed;left:16px;bottom:16px;display:flex;flex-direction:column;align-items:start;z-index:100001;}.toast-card{background:#fff;min-width:240px;max-width:60vw;min-height:0;max-height:0;box-shadow:0 4px 16px 1px rgba(0,0,0,.3);transition:all .3s cubic-bezier(0,0.65,0.58,1);transform:translateX(-150%);transform-origin:left;overflow:hidden;display:flex;flex-direction:column;border-left-width:4px;border-left-style:solid;}.toast-card.visible{min-height:96px;max-height:unset;transform:translateX(0);margin-top:16px;}.toast-card-header{display:flex;align-items:center;}.toast-card-title{font-size:18px;color:#000;opacity:0.5;margin:16px;font-weight:bold;flex:1 1 auto;}.toast-card-dismiss{height:24px;width:24px;flex:0 0 auto;padding:16px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:all .2s ease-out;transform-origin:center;opacity:0.5;}.toast-card-dismiss:hover{transform:scale(1.2);}.toast-card-dismiss:active{transform:scale(1.1);}.toast-card-message{color:#000;font-size:14px;margin:16px;margin-top:0;white-space:pre-wrap;}.toast-card.toast-default{border-left-color:#444;}.toast-card.toast-error{border-left-color:#f44336;}.toast-card.toast-info{border-left-color:#2196F3;}.toast-card.toast-success{border-left-color:#8BC34A;}.toast-card span,.toast-card .link{display:inline-block;padding:4px 6px;margin:0 2px;background-color:rgba(0,0,0,.1);text-decoration:none;color:#000;transition:all .2s ease-out;}.toast-card .link:hover{background-color:rgba(0,0,0,.2);}.toast-card .link:active{background-color:rgba(0,0,0,.1);}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.css"] = `@supports (backdrop-filter: blur(48px)) or (-webkit-backdrop-filter: blur(48px)){.video-control-blur-layer{width:100%;height:100%;position:absolute;-webkit-backdrop-filter:blur(48px);backdrop-filter:blur(48px);z-index:-1;top:0;}.bilibili-player-video-control-mask{background:transparent!important;}.bilibili-player-video-control-bottom,.bui-slider .bui-track.bui-track-video-progress .bui-bar-wrap{background-color:transparent!important;}.bilibili-player-video-control-bottom{position:relative;}.bilibili-player-area .bilibili-player-video-control-wrap,.bilibili-player-area .bilibili-player-video-control-bottom{transition:none!important;}}`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/force-wide.min.css"] = `@media screen and (min-width: 1300px){.bili-wrapper{width:1160px;}.bili-wrapper .l-con{width:900px;}.bili-header-m .bili-wrapper{width:1160px;}.bili-header-m .bili-wrapper .l-con{width:900px;}.gg-floor-module{width:1160px;max-height:96px;}.bangumi-timing-module .headline .bili-tab{width:650px;}.bangumi-timing-module .headline .bili-tab .bili-tab-item{width:70px;}.bangumi-timing-module .card-timing:first-child:nth-child(4),.bangumi-timing-module .card-timing:nth-child(2):nth-child(4),.bangumi-timing-module .card-timing:nth-child(3):nth-child(4),.bangumi-timing-module .card-timing:nth-child(4):nth-child(4){padding-top:0;}.bangumi-timing-module .card-timing{padding:36px 34px 0 0;}.audio-list .song-list .song-li:nth-child(5n) .content .text{margin-right:0;}.audiolist-list .song-list .song-li:nth-child(5n) .content .text{margin-right:0;}.elevator-module{margin-left:590px;}#primary_menu,#primary_menu>ul.nav-menu,.uns_box li.u-i.b-post{display:flex;align-items:center;justify-content:space-between;}.primary-menu{width:100%;}.primary-menu .nav-menu{flex-grow:1;}.primary-menu .nav-gif{position:static;margin-left:2%;}.primary-menu .nav-menu>li{margin-right:0!important;}.primary-menu .nav-menu>li.home{padding-right:1%;}}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.css"] = `.download-video-panel.opened{transform:scaleY(1);}.download-video-panel{position:absolute;top:calc(100% + 2px);transition:all .16s ease-out;transform-origin:top;transform:scaleY(0);background:white;box-shadow:0px 3px 20px 2px #0004;z-index:100;}ol.video-quality li,.video-action>div{cursor:pointer;align-items:center;margin:0;padding:8px 16px;transition:all .2s ease-out;text-align:center;}.video-action>div{padding:12px 24px;}ol.video-quality li:hover,.video-action>div:hover{background:rgba(0,0,0,0.16);}.video-quality,.video-progress,.video-action,.video-error{display:none;}.download-video-panel.quality:not(.error) .video-quality,.download-video-panel.progress:not(.error) .video-progress,.download-video-panel.action:not(.error) .video-action,.download-video-panel.error .video-error{display:block;}.download-progress-text{display:flex;}.download-progress-background{background-color:#8884;height:4px;width:100%;margin-top:4px;}.download-progress-foreground{background-color:var(--theme-color);transform-origin:left;transition:all .2s ease-out;transform:scaleX(0);height:100%;width:100%;}.download-progress-cancel{margin-top:8px;display:flex;justify-content:center;}.download-progress-cancel>span{background-color:#8884;padding:4px 8px;cursor:pointer;}.download-progress-cancel>span:hover{opacity:.9;}.download-progress-cancel>span:active{opacity:.8;}.video-error,.video-progress{padding:12px;}.video-progress{min-width:120px;}#video-complete{display:none;}`; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/gui-settings.min.html"] = `
    附加功能
    设置
      视频样式
    • 工具触摸其他
    `; offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/image-viewer.min.html"] = `
    `; @@ -1086,7 +1068,7 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/text-validate.min.js"] = (()=>{return(t,e)=>{class i{constructor(t){this.key=t}get originalValue(){return t[this.key]}static getValidator(t){switch(t){case"customStyleColor":return new r(t);case"blurBackgroundOpacity":case"customControlBackgroundOpacity":return new a(t);case"defaultPlayerMode":case"defaultVideoQuality":return new s(t);case"darkScheduleStart":case"darkScheduleEnd":return new n(t);default:return new i(t)}}isValidate(t){return t}validate(t){const e=this.isValidate(t);if(e===undefined){return this.originalValue}return e}}class r extends i{isValidate(t){if(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(t)){if(t.length<7){return`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`}else{return t}}}}class a extends i{isValidate(t){if(/^([-\+]?\d+)(\.\d+)?$/.test(t)){const e=parseFloat(t);if(e>=0&&e<=1){return t}}}}class s extends i{isValidate(t){const[e]=Object.values(Resource.manifest).filter(t=>t.dropdown&&t.dropdown.key===this.key).map(t=>t.dropdown);if(e.items.indexOf(t)!==-1){return t}}}class n extends i{isValidate(t){const e=t.match(/^([\d]{1,2}):([\d]{1,2})$/);if(e&&e.length>=3){const t={hour:parseInt(e[1]),minute:parseInt(e[2])};(function(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}).call(t);return`${t.hour}:${t.minute<10?"0"+t.minute:t.minute}`}}}return{export:{Validator:i,ColorValidator:r,DropDownValidator:s,OpacityValidator:a,TimeValidator:n}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/theme-colors.min.js"] = (()=>{return(e,o)=>{const r={red:"#e57373",pink:"#F06292",purple:"#BA68C8",deepPurple:"#9575CD",indigo:"#7986CB",blue:"#2196F3",lightBlue:"#00A0D8",cyan:"#00ACC1",teal:"#26A69A",green:"#81C784",lightGreen:"#9CCC65",orange:"#FF9800",deepOrange:"#FF7043",brown:"#A1887F",grey:"#757575",blueGrey:"#78909C"};class t{constructor(){this.reloadColor=(()=>{const e=document.querySelector("html");return function(o){const r=new ColorProcessor(o);const t=e=>r.rgbToString(r.hexToRgba(e));const l=r.hexToRgba(o+"70");$("div.custom-color-preview").css("background",o).css("box-shadow",`0px 2px 8px 1px rgba(${l.r},${l.g},${l.b},${l.a})`);e.style.setProperty("--theme-color",o);for(let r=10;r<=90;r+=10){e.style.setProperty(`--theme-color-${r}`,t(o+r))}e.style.setProperty("--foreground-color",r.foreground);e.style.setProperty("--foreground-color-b",t(r.foreground+"b"));e.style.setProperty("--foreground-color-d",t(r.foreground+"d"));e.style.setProperty("--blue-image-filter",r.blueImageFilter);e.style.setProperty("--pink-image-filter",r.pinkImageFilter);e.style.setProperty("--brightness",r.brightness);e.style.setProperty("--invert-filter",r.filterInvert)}})()}setupDom(){$(`input[key='customStyleColor']`).on("change",()=>{this.reloadColor($(`input[key='customStyleColor']`).val())});const e=$(".predefined-colors-grid");for(const o of Object.values(r)){$(`
    `).appendTo(e).css("background",o).attr("data-color",o).on("click",e=>{const o=$(e.target).attr("data-color");$(`input[key='customStyleColor']`).val(o).trigger("input").change();$("div.custom-color-preview").on("click")})}$("div.custom-color-preview").on("click",()=>{const e=$(".predefined-colors");e.toggleClass("opened")})}}return{export:t}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.css"] = `.gui-settings-tooltip{position:fixed;left:420px;color:white;background:#0008;padding:1rem;font-size:12pt;top:50%;transform:translateY(-50%);transition:all .2s ease-out .8s;opacity:0;min-width:100%;max-height:60%;line-height:24px;white-space:pre-wrap;pointer-events:none;}.gui-settings-tooltip.show{pointer-events:initial;opacity:1;}.gui-settings-tooltip span{font-weight:bold;}`; -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.js"] = (()=>{return(n,a)=>{const e={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,forceWide:`对主站强制使用宽屏样式, 将在宽度达到1300px时启用. 此功能的适用范围为屏幕宽度介于1300px1400px的设备.\n原有的宽屏样式会在宽度超过1400px时自动启用, 如果你的屏幕宽度大于1400px, 则没有必要开启此功能.\n非宽屏样式下, 首页视频排行为2行3列; 宽屏样式下, 首页视频排行为2行4列.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(n){const a=$(n).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const n=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const s=e[t(a)];if(s!==undefined){n.innerHTML=s;n.classList.add("show")}});a.addEventListener("mouseout",()=>{n.classList.remove("show")})})})();return{export:e}}})(); +offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-tooltip.min.js"] = (()=>{return(e,a)=>{const n={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(e){const a=$(e).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const e=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const o=n[t(a)];if(o!==undefined){e.innerHTML=o;e.classList.add("show")}});a.addEventListener("mouseout",()=>{e.classList.remove("show")})})})();return{export:n}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/settings-search.min.js"] = (()=>{return(t,e)=>{const s=e.attributes.settingsTooltip.export;class i{constructor(){this.input=document.querySelector(".gui-settings-search");const t=[...document.querySelectorAll(".gui-settings-content>ul>li")];const e=t=>e=>e.classList.contains("category")===t;this.categories=t.filter(e(true));this.items=t.filter(e(false));this.input.addEventListener("input",()=>this.keywordChange())}keywordChange(){const t=this.input.value.trim();if(!t){this.categories.concat(this.items).forEach(t=>t.classList.add("folded"));return}this.items.forEach(e=>{const i=$(e).find("input").attr("key");const n=e.innerText+s[i].replace(/|<\/span>/g,"");if(n.includes(t)){e.classList.remove("folded")}else{e.classList.add("folded")}});this.foldCategories()}foldCategories(){for(const e of this.categories){function t(){let t=e.nextElementSibling;while(t!==null&&!t.classList.contains("category")){if(!t.classList.contains("folded")){return"remove"}t=t.nextElementSibling}return"add"}e.classList[t()]("folded")}}}return{export:i}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/gui-settings.min.js"] = (()=>{return(e,t)=>{const n=t.attributes.textValidate.export.Validator;const i=t.attributes.settingsSearch.export;const s=t.attributes.themeColors.export;const o=new s;const a=t.data.guiSettingsDom.text;function c(e){let t=e.nextElementSibling;const n=[];while(t!==null&&!t.classList.contains("category")){n.push(t);t=t.nextElementSibling}return n}function r(e,t){$(`input[type='checkbox'][key='${e}']`).prop("checked",t);$(`input[type='text'][key='${e}']`).val(t)}function u(){for(const[t,n]of Object.entries(e)){r(t,n)}}function l(){$(".gui-settings-mask").on("click",()=>{$(".gui-settings-widgets-box,.gui-settings-box,.gui-settings-mask").removeClass("opened")});$("input[type='text'][key]").each((t,n)=>{$(n).attr("placeholder",e[$(n).attr("key")])});$(".gui-settings-content ul li.category").on("click",e=>{const t=document.querySelector(".gui-settings-search");if(t.value!==""){t.value="";raiseEvent(t,"input")}e.currentTarget.classList.toggle("folded");c(e.currentTarget).forEach(e=>e.classList.toggle("folded"))});$(".gui-settings-dropdown>input").on("click",e=>{$(e.currentTarget).parent().toggleClass("opened")});onSettingsChange((t,n,i)=>{if(e[t]!==i){e[t]=i;$(`input[type='checkbox'][key='${t}']`).prop("checked",i).change();$(`input[type='text'][key='${t}']`).val(i).change()}})}function p(){const t=e=>{};$("input[type='checkbox'][key]").each((n,i)=>{$(i).on("change",()=>{const n=i.getAttribute("key");const s=i.checked;e[n]=s;t(n);saveSettings(e)})});$("input[type='text'][key]").each((i,s)=>{$(s).on("change",()=>{const i=s.getAttribute("key");const o=n.getValidator(i).validate(s.value);e[i]=o;s.value=o;t(i);saveSettings(e)})})}function d(){const e={};$(`input[dependencies]`).each((t,n)=>{const i=$(n).attr("dependencies");if(i){e[$(n).attr("key")]=i}});const t=t=>{const n=t.prop("checked");for(const i in e){const s=e[i].split(" ");if(s.indexOf(t.attr("key"))!==-1){let e=true;if(n&&s.every(e=>$(`input[key='${e}']`).prop("checked"))){e=false}const t=$(`li:has(input[key='${i}'])`);const o=e?"addClass":"removeClass";t[o]("disabled");$(`input[key='${i}'][type='text']`).parent()[o]("disabled")}}};$(`input[type='checkbox'][key]`).on("change",e=>t($(e.target))).each((e,n)=>t($(n)))}function g(){if(typeof offlineData!=="undefined"){$("li:has(input[key=useCache])").addClass("disabled");$("input[key=useCache]").prop("disabled",true)}}function y(){$(".gui-settings-content ul li.category").each((e,t)=>{$(t).click()})}function k(){if(!CSS.supports("backdrop-filter","blur(24px)")&&!CSS.supports("-webkit-backdrop-filter","blur(24px)")){$("input[key=blurVideoControl]").prop("disabled",true);e.blurVideoControl=false;saveSettings(e)}if(window.devicePixelRatio===1){$("input[key=harunaScale]").prop("disabled",true);e.harunaScale=false;saveSettings(e)}}t.applyStyle("guiSettingsStyle");$("body").append(a);l();g();u();d();o.setupDom();p();y();k();new i;new SpinQuery(()=>$("body"),e=>e.length>0&&!(unsafeWindow.parent.window===unsafeWindow),e=>$(".gui-settings-icon-panel").css("display","none")).start()}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-styles.min.js"] = (()=>{return(e,l)=>{if(e.useDarkStyle){l.applyStyle("scrollbarStyle");SpinQuery.any(()=>$(".custom-scrollbar"),e=>e.removeClass("custom-scrollbar"));if($("#banner_link").length===0||$("#banner_link").length>0&&e.overrideNavBar&&!e.showBanner){l.applyImportantStyle("darkStyleNavBar")}l.applyStyle("darkStyle");l.applyImportantStyle("darkStyleImportant")}else{l.removeStyle("scrollbarStyle");l.removeStyle("darkStyleNavBar");l.removeStyle("darkStyle");l.removeStyle("darkStyleImportant")}}})(); @@ -1108,7 +1090,6 @@ offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/m offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/remove-top-mask.min.js"] = (()=>{return(i,n)=>{const l="bilibili-video-top-mask";if($(`#${l}`).length===0){n.applyStyleFromText(`\n \n `)}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/blur-video-control.min.js"] = (()=>{return(r,e)=>{(Observer.childListSubtree||Observer.subtree)("#bofqi",()=>{SpinQuery.count(()=>$(".bui-slider .bui-track.bui-track-video-progress,.bilibili-player-video-control-bottom"),2,r=>{if(!r.hasClass("video-control-blur-container")){r.addClass("video-control-blur-container");r.prepend(`
    `)}})});e.applyStyle("blurVideoControlStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/dark-schedule.min.js"] = (()=>{return(e,t)=>{class s{constructor(...e){if(e.length===0){const e=new Date;this.hour=e.getHours();this.minute=e.getMinutes()}else if(e.length===1){const[t]=e;[this.hour,this.minute]=t.split(":").slice(0,2).map(e=>this.validatePart(e));this.normalize()}else if(v.length===2){[this.hour,this.minute]=e}}validatePart(e){const t=parseInt(e);if(!isNaN(t)&&0<=t&&t<=59){return t}else{return null}}normalize(){while(this.minute<0){this.minute+=60;this.hour-=1}while(this.minute>=60){this.minute-=60;this.hour+=1}while(this.hour<0){this.hour+=24}while(this.hour>=24){this.hour-=24}}lessThan(e){if(this.houre.hour||this.hour===e.hour&&this.minute>e.minute){return true}return false}equals(e){return this.hour===e.hour&&this.minute===e.minute}isInRange(e,t){if(e.equals(t)){return false}let s=this.greaterThan(e)&&this.lessThan(t);if(e.greaterThan(t)){s=this.greaterThan(e)||this.lessThan(t)}const i=s||this.equals(e);return i}static millisecondsBefore(e){const t=new s;const i=(new Date).getSeconds();const r=1e3*(t.hour*3600+t.minute*60+i);const n=1e3*(e.hour*3600+e.minute*60);let h=n-r;if(t.greaterThan(e)||t.equals(e)&&i!==0){h+=24*3600*1e3}return h}}function i(){if(e.darkSchedule){const t=new s(e.darkScheduleStart);const r=new s(e.darkScheduleEnd);const n=new s;const h=n.isInRange(t,r);if(e.useDarkStyle!==h){e.useDarkStyle=h;saveSettings(e)}let u=0;if(h){u=s.millisecondsBefore(r)}else{u=s.millisecondsBefore(t)}if(u!==0){setTimeout(()=>i(),u)}}}i();return{export:s}}})(); -offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/force-wide.min.js"] = (()=>{return(e,t)=>{t.applyImportantStyle("forceWideStyle")}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/clear-cache.min.js"] = (()=>{return(n,c)=>{return{widget:{content:`\n \n \n 清除缓存\n `,condition:()=>typeof offlineData==="undefined",success:()=>{$("#clear-cache").on("click",()=>{n.cache={};saveSettings(n);Toast.success("已删除全部缓存.","清除缓存",5e3)})}}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-video.min.js"] = (()=>{return(e,t)=>{const n={entity:null,aid:undefined,cid:undefined,isBangumi:false};const s=[];$(document).ajaxSend((e,t,n)=>{if(n.url.indexOf("https://bangumi.bilibili.com/player/web_api/v2/playurl")!==-1){s.unshift(n.url)}});class i{constructor(){this.menuPanel=document.querySelector(".download-video-panel");this.menuClasses=["quality","action","progress"];this.currentMenuClass="quality"}addMenuClass(){this.menuPanel.classList.remove(...this.menuClasses);this.menuPanel.classList.add(this.currentMenuClass);return this.currentMenuClass}resetMenuClass(){[this.currentMenuClass]=this.menuClasses;this.addMenuClass()}nextMenuClass(){const e=this.menuClasses.indexOf(this.currentMenuClass)+1;const t=this.menuClasses[e>=this.menuClasses.length?0:e];this.currentMenuClass=t;this.addMenuClass();return t}addError(){this.menuPanel.classList.add("error")}removeError(){this.menuPanel.classList.remove("error");this.resetMenuClass()}async getUrl(e){if(e){return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&qn=${e}&otype=json`}else{return`https://api.bilibili.com/x/player/playurl?avid=${n.aid}&cid=${n.cid}&otype=json`}}}class o extends i{constructor(e){super(e);this.menuClasses=["action","progress"];this.currentMenuClass="action"}async getUrl(){const e=await SpinQuery.select(()=>s[0]).catch(()=>logError("获取番剧下载链接失败."));return e}}class r{constructor(e,t,n){this.quality=e;this.internalName=t;this.displayName=n}async downloadInfo(){const e=new l(this);await e.fetchVideoInfo();return e}static get availableFormats(){return new Promise((e,t)=>{n.entity.getUrl().then(n=>{const s=new XMLHttpRequest;s.addEventListener("load",()=>{const n=JSON.parse(s.responseText);if(n.code!==0){t("获取清晰度信息失败.")}const i=n.data||n;const o=i.accept_quality;const a=i.accept_format.split(",");const l=i.accept_description;const c=[];while(o.length>0){const e=new r(o.pop(),a.pop(),l.pop());c.push(e)}e(c)});s.addEventListener("error",()=>t(`获取清晰度信息失败.`));s.withCredentials=true;s.open("GET",n);s.send()})})}}class a{constructor(e,t,n,s){this.length=e;this.size=t;this.url=n;this.backupUrls=s}}class l{constructor(e,t){this.format=e;this.fragments=t||[];this.progress=null;this.loaded=0;this.totalSize=null;this.workingXhr=null;this.fragmentSplitFactor=6*5}fetchVideoInfo(){return new Promise((e,t)=>{n.entity.getUrl(this.format.quality).then(s=>{const i=new XMLHttpRequest;i.addEventListener("load",()=>{const s=JSON.parse(i.responseText.replace(/http:/g,"https:"));const o=s.data||s;if(!n.isBangumi&&o.quality!==this.format.quality){t("获取下载链接失败, 请确认当前账号有下载权限后重试.")}const r=o.durl;this.fragments=r.map(e=>new a(e.length,e.size,e.url,e.backup_url));e(this.fragments)});i.withCredentials=true;i.open("GET",s);i.send()})})}cancelDownload(){if("forEach"in this.workingXhr){this.workingXhr.forEach(e=>e.abort())}else{logError("Cancel Download Failed: forEach in this.workingXhr not found.")}}downloadFragment(e){const t=[];this.workingXhr=[];const n=Math.round(e.size/this.fragmentSplitFactor);let s=0;while(s{let s=0;const o=new XMLHttpRequest;o.open("GET",e.url);o.responseType="arraybuffer";o.withCredentials=false;o.addEventListener("progress",e=>{this.loaded+=e.loaded-s;s=e.loaded;this.progress&&this.progress(this.loaded/this.totalSize)});o.addEventListener("load",()=>{if((""+o.status)[0]==="2"){t(o.response)}else{n(`请求失败.`)}});o.addEventListener("abort",()=>n("下载已取消."));o.addEventListener("error",()=>n(`下载失败.`));o.setRequestHeader("Range",i);o.send();this.workingXhr.push(o)}));s=Math.round(s+n)}return Promise.all(t)}copyUrl(){const e=this.fragments.map(e=>e.url).reduce((e,t)=>e+"\r\n"+t);GM_setClipboard(e,"text")}extension(e){return(e||this.fragments[0]).url.indexOf(".flv")!==-1?".flv":".mp4"}makeBlob(e,t=null){return new Blob(Array.isArray(e)?e:[e],{type:this.extension(t)===".flv"?"video/x-flv":"video/mp4"})}cleanUpOldBlobUrl(){const e=$("a#video-complete").attr("href");if(e&&$(`.link[href=${e}]`).length===0){URL.revokeObjectURL(e)}}downloadSingle(e){const[t]=e;const n=this.makeBlob(t);const s=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","")+this.extension();return[n,s]}async downloadMultiple(e){const t=new JSZip;const n=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");if(e.length>1){e.forEach((e,s)=>{const i=this.fragments[s];t.file(`${n} - ${s+1}${this.extension(i)}`,this.makeBlob(e,i))})}else{const[s]=e;t.file(`${n}${this.extension()}`,this.makeBlob(s))}const s=await t.generateAsync({type:"blob"});const i=n+".zip";return[s,i]}async download(){const e=[];this.loaded=0;this.totalSize=this.fragments.map(e=>e.size).reduce((e,t)=>e+t);for(const t of this.fragments){const n=await this.downloadFragment(t);e.push(n)}if(e.length<1){throw new Error("下载失败.")}let t=null;let n=null;if(e.length===1){[t,n]=this.downloadSingle(e)}else{[t,n]=await this.downloadMultiple(e)}const s=URL.createObjectURL(t);this.cleanUpOldBlobUrl();this.progress&&this.progress(0);return{url:s,filename:n}}}async function c(){const e=await SpinQuery.select(()=>(unsafeWindow||window).aid);const t=await SpinQuery.select(()=>(unsafeWindow||window).cid);n.aid=e;n.cid=t;if(document.URL.indexOf("bangumi")!==-1){n.isBangumi=true;n.entity=new o}else{n.entity=new i}return e!==undefined&&t!==undefined}async function d(){await c();const e=await r.availableFormats;let[s]=e;const i=()=>s.downloadInfo().catch(e=>{n.entity.addError();$(".video-error").text(e)});async function o(){if(!s){return}n.entity.nextMenuClass();const e=await i();e.progress=(e=>{$(".download-progress-value").text(`${fixed(e*100)}`);$(".download-progress-foreground").css("transform",`scaleX(${e})`)});document.querySelector(".download-progress-cancel>span").onclick=(()=>e.cancelDownload());const t=await e.download().catch(e=>{n.entity.addError();$(".video-error").text(e)});if(!t){return}const o=document.getElementById("video-complete");o.setAttribute("href",t.url);o.setAttribute("download",t.filename);o.click();const r=`下载完成. 再次保存`;Toast.success(r,"下载视频");n.entity.resetMenuClass()}async function a(){if(!s){return}const e=await i();e.copyUrl();Toast.success("已复制链接到剪贴板.","复制链接",3e3);n.entity.resetMenuClass()}$(".video-action>#video-action-download").on("click",o);$(".video-action>#video-action-copy").on("click",a);e.forEach(e=>{$(`
  • ${e.displayName}
  • `).on("click",()=>{s=e;n.entity.nextMenuClass()}).prependTo("ol.video-quality")});t.applyStyle("downloadVideoStyle");const l=document.querySelector(".download-video-panel");const d=()=>$(".download-video-panel").toggleClass("opened");$("#download-video").on("click",e=>{if(!l.contains(e.target)){d()}});$(".video-error").on("click",()=>{$(".video-error").text("");n.entity.removeError()});n.entity.addMenuClass()}return{widget:{content:t.data.downloadVideoDom.text,condition:c,success:d}}}})(); offlineData["https://raw.githubusercontent.com/the1812/Bilibili-Evolved/master/min/download-danmaku.min.js"] = (()=>{return(n,t)=>{const e=t.attributes.videoInfo.export.DanmakuInfo;async function a(n){const t=document.title.replace("_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili","").replace("_番剧_bilibili_哔哩哔哩","");const a=new e((unsafeWindow||window).cid);await a.fetchInfo();const o=new Blob([a.rawXML],{type:"text/plain"});const i=URL.createObjectURL(o);const c=$("#danmaku-link");const d=c.attr("href");if(d){URL.revokeObjectURL(d)}clearTimeout(n);document.querySelector("#download-danmaku>span").innerHTML="下载弹幕";c.attr("download",`${t}.xml`).attr("href",i).get(0).click()}return{widget:{content:`\n \n \n 下载弹幕\n \n `,condition:async()=>{let n=await SpinQuery.condition(()=>(unsafeWindow||window).cid,n=>n!==undefined);return n!==undefined},success:()=>{const n=document.querySelector("#danmaku-link");$("#download-danmaku").on("click",t=>{if(t.target!==n){const n=setTimeout(()=>document.querySelector("#download-danmaku>span").innerHTML="请稍侯...",200);a(n)}})}}}}})(); diff --git a/bilibili-evolved.preview.user.js b/bilibili-evolved.preview.user.js index 645ca9b0c..78330a0cd 100644 --- a/bilibili-evolved.preview.user.js +++ b/bilibili-evolved.preview.user.js @@ -38,7 +38,6 @@ touchVideoPlayer: false, customControlBackgroundOpacity: 0.64, customControlBackground: true, - forceWide: false, darkScheduleStart: "18:00", darkScheduleEnd: "6:00", darkSchedule: false, @@ -87,6 +86,7 @@ useDefaultPlayerMode: true, useDefaultPlayerLayout: true, about: false, + forceWide: false, latestVersionLink: "https://github.com/the1812/Bilibili-Evolved/raw/preview/bilibili-evolved.preview.user.js", currentVersion: GM_info.script.version, }; @@ -190,9 +190,6 @@ path: "min/blur-video-control.min.css", order: 20, }, - forceWideStyle: { - path: "min/force-wide.min.css", - }, downloadVideoStyle: { path: "min/download-video.min.css", }, @@ -438,20 +435,6 @@ darkScheduleEnd: "结束时间", }, }, - forceWide: { - path: "min/force-wide.min.js", - styles: [ - { - key: "forceWideStyle", - important: true, - condition: () => true, - }, - ], - displayNames: { - forceWide: "强制宽屏", - forceWideMinWidth: "触发宽度", - }, - }, clearCache: { path: "min/clear-cache.min.js", displayNames: { diff --git a/bilibili-evolved.user.js b/bilibili-evolved.user.js index a97f8f80d..c35e740c7 100644 --- a/bilibili-evolved.user.js +++ b/bilibili-evolved.user.js @@ -38,7 +38,6 @@ touchVideoPlayer: false, customControlBackgroundOpacity: 0.64, customControlBackground: true, - forceWide: false, darkScheduleStart: "18:00", darkScheduleEnd: "6:00", darkSchedule: false, @@ -87,6 +86,7 @@ useDefaultPlayerMode: true, useDefaultPlayerLayout: true, about: false, + forceWide: false, latestVersionLink: "https://github.com/the1812/Bilibili-Evolved/raw/master/bilibili-evolved.user.js", currentVersion: GM_info.script.version, }; @@ -190,9 +190,6 @@ path: "min/blur-video-control.min.css", order: 20, }, - forceWideStyle: { - path: "min/force-wide.min.css", - }, downloadVideoStyle: { path: "min/download-video.min.css", }, @@ -438,20 +435,6 @@ darkScheduleEnd: "结束时间", }, }, - forceWide: { - path: "min/force-wide.min.js", - styles: [ - { - key: "forceWideStyle", - important: true, - condition: () => true, - }, - ], - displayNames: { - forceWide: "强制宽屏", - forceWideMinWidth: "触发宽度", - }, - }, clearCache: { path: "min/clear-cache.min.js", displayNames: { diff --git a/images/compact-layout-disabled.png b/images/compact-layout-disabled.png new file mode 100644 index 000000000..963c25f5b Binary files /dev/null and b/images/compact-layout-disabled.png differ diff --git a/images/compact-layout.png b/images/compact-layout.png new file mode 100644 index 000000000..1e1f13a45 Binary files /dev/null and b/images/compact-layout.png differ diff --git a/min/settings-tooltip.min.js b/min/settings-tooltip.min.js index 6990cc593..98c39c58d 100644 --- a/min/settings-tooltip.min.js +++ b/min/settings-tooltip.min.js @@ -1 +1 @@ -(()=>{return(n,a)=>{const e={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,forceWide:`对主站强制使用宽屏样式, 将在宽度达到1300px时启用. 此功能的适用范围为屏幕宽度介于1300px1400px的设备.\n原有的宽屏样式会在宽度超过1400px时自动启用, 如果你的屏幕宽度大于1400px, 则没有必要开启此功能.\n非宽屏样式下, 首页视频排行为2行3列; 宽屏样式下, 首页视频排行为2行4列.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(n){const a=$(n).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const n=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const s=e[t(a)];if(s!==undefined){n.innerHTML=s;n.classList.add("show")}});a.addEventListener("mouseout",()=>{n.classList.remove("show")})})})();return{export:e}}})(); \ No newline at end of file +(()=>{return(e,a)=>{const n={defaultPlayerMode:`设置默认的播放器模式, 可以为常规, 宽屏网页全屏(全屏还未完成). 默认模式将在进入视频页面的首次播放时应用.`,defaultPlayerLayout:`设置视频页(非番剧/电影)默认的播放器布局.\n- 旧版: 传统布局/番剧区使用的布局\n- 新版: 视频区默认的新版布局\n注: 更改此设置将立即刷新页面; 旧版布局中, 很多功能将不适用, 如夜间模式, 样式调整, 历史纪录点播放等.`,useDefaultVideoQuality:`进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.`,defaultVideoQuality:`设定自动选择的视频画质.`,autoLightOff:`首次播放时, 自动进入关灯模式.`,useDefaultDanmakuSettings:`设置默认是否开启弹幕, 以及是否记住弹幕屏蔽类型.`,enableDanmaku:`控制弹幕是否默认开启.`,rememberDanmakuBlock:`控制是否记住弹幕屏蔽类型, 在播放器中选择要屏蔽的弹幕类型后, 每个视频都会默认屏蔽这些类型的弹幕.`,expandDanmakuList:`新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.`,expandDescription:`长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.`,autoContinue:`播放视频时如果检测到历史记录信息(上次看到...消息), 则自动跳转到相应的时间播放.`,skipChargeList:`自动跳过视频结尾的充电鸣谢.`,customStyleColor:`设定顶栏(样式调整启用时)和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(#rrggbb#rgb).`,useNewStyle:`主要会改变顶栏的样式, 并有一些其他地方的界面微调:\n- 为播放器增加主题色投影\n- 可控制顶栏对横幅的透明度\n- 使播放器按钮垂直对齐\n- 使部分搜索栏的提示文字的颜色更清晰\n- 隐藏播放页面的"返回旧版"侧栏\n- 修复直播间一些文字初始状态不正确`,blurBackgroundOpacity:`设置顶栏对横幅的透明度(0~1), 数值越高顶栏越淡, 当横幅关闭时此选项无效.`,useDarkStyle:`夜间模式更适合光线暗的环境, 并会大量应用主题颜色.`,darkSchedule:`设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.\n结束时间小于起始时间时将视为次日, 如18:006:00表示晚上18:00到次日6:00.`,darkScheduleStart:`设置计划时段的起始时间.`,darkScheduleEnd:`设置计划时段的结束时间.`,compactLayout:`设置首页是否使用紧凑布局, 视频的间距会减小并削去圆角, 分区栏的图标会使用高清重制版.`,overrideNavBar:`开启后, 在主站中总是把搜索框置于顶栏, 如果页面里没有搜索栏则不会显示.`,showBanner:`控制是否显示主站顶部的横幅`,preserveRank:`控制是否在搜索框左侧显示排行榜图标.`,blurVideoControl:`模糊视频控制栏背景, 原版的阴影效果将无效.`,customControlBackground:`给视频控制栏附上半透明的黑色, 代替原来的阴影.`,customControlBackgroundOpacity:`设置控制栏着色的黑色不透明度(0~1), 数值越大黑色越浓.`,harunaScale:`根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`,removeLiveWatermark:`删除观看直播时角落的水印.`,removeVideoTopMask:`删除视频里鼠标经过时出现在顶端的标题覆盖层.`,removeAds:`删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`,watchLaterRedirect:`将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`,hideTopSearch:`将搜索框的推荐词替换为搜索.`,fullTweetsTitle:`在顶栏的动态预览框中, 总是展开完整的标题.`,touchNavBar:`删除顶栏右侧的一级链接(从大会员历史), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的查看更多进入.`,comboLike:`为素质三连(长按点赞)启用触摸支持.`,touchVideoPlayer:`增大控制栏的按钮间距, 使触摸操作更准确. 并为播放器启用触摸支持:\n- 左右滑动可调整进度\n- 上下滑动可调整音量\n- 进度调整可在左上角和右上角取消\n- 在不同位置滑动, 可以使用3档不同的灵敏度.`,touchVideoPlayerAnimation:`决定是否要对触摸调整的提示框使用出现/消失动画, 此动画可能导致掉帧.`,touchVideoPlayerDoubleTapControl:`将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.`,toast:`允许在网页左下角显示来自本脚本的消息, 如更新提醒, 错误提示等.`,toastInternalError:`开启后, 错误消息将显示详细的技术性错误信息及堆栈跟踪, 这通常用于准确地确定问题发生的原因, 所以报告问题时这些信息会非常有用.`,useCache:`使用缓存以提高脚本的加载速度.`};function t(e){const a=$(e).find("input");if(a.length>0){return a.attr("key")}return null}(async()=>{a.applyStyle("settingsTooltipStyle");const e=await SpinQuery.select(()=>document.querySelector(".gui-settings-tooltip"));document.querySelectorAll(".gui-settings-content>ul>li").forEach(a=>{a.addEventListener("mouseover",()=>{const o=n[t(a)];if(o!==undefined){e.innerHTML=o;e.classList.add("show")}});a.addEventListener("mouseout",()=>{e.classList.remove("show")})})})();return{export:n}}})(); \ No newline at end of file diff --git a/style/force-wide/force-wide.css b/style/force-wide/force-wide.css deleted file mode 100644 index 08eea1191..000000000 --- a/style/force-wide/force-wide.css +++ /dev/null @@ -1,71 +0,0 @@ -@media screen and (min-width: 1300px) { - .bili-wrapper { - width:1160px; - } - .bili-wrapper .l-con { - width:900px; - } - .bili-header-m .bili-wrapper { - width:1160px; - } - .bili-header-m .bili-wrapper .l-con { - width:900px; - } - .gg-floor-module { - width:1160px; - max-height: 96px; - } - .bangumi-timing-module .headline .bili-tab { - width:650px; - } - .bangumi-timing-module .headline .bili-tab .bili-tab-item { - width: 70px; - } - .bangumi-timing-module .card-timing:first-child:nth-child(4), - .bangumi-timing-module .card-timing:nth-child(2):nth-child(4), - .bangumi-timing-module .card-timing:nth-child(3):nth-child(4), - .bangumi-timing-module .card-timing:nth-child(4):nth-child(4) { - padding-top:0; - } - .bangumi-timing-module .card-timing { - padding:36px 34px 0 0; - } - .audio-list .song-list .song-li:nth-child(5n) .content .text { - margin-right:0; - } - .audiolist-list .song-list .song-li:nth-child(5n) .content .text { - margin-right:0; - } - .elevator-module { - margin-left:590px; - } - #primary_menu, - #primary_menu>ul.nav-menu, - .uns_box li.u-i.b-post - { - display: flex; - align-items: center; - justify-content: space-between; - } - .primary-menu - { - width: 100%; - } - .primary-menu .nav-menu - { - flex-grow: 1; - } - .primary-menu .nav-gif - { - position: static; - margin-left: 2%; - } - .primary-menu .nav-menu>li - { - margin-right: 0 !important; - } - .primary-menu .nav-menu>li.home - { - padding-right: 1%; - } -} \ No newline at end of file diff --git a/style/force-wide/force-wide.js b/style/force-wide/force-wide.js deleted file mode 100644 index f3d43bf40..000000000 --- a/style/force-wide/force-wide.js +++ /dev/null @@ -1,7 +0,0 @@ -(() => -{ - return (_, resources) => - { - resources.applyImportantStyle("forceWideStyle"); - }; -})(); \ No newline at end of file diff --git a/utils/gui-settings/tooltip/settings-tooltip.js b/utils/gui-settings/tooltip/settings-tooltip.js index 5b2f85001..d36d90eeb 100644 --- a/utils/gui-settings/tooltip/settings-tooltip.js +++ b/utils/gui-settings/tooltip/settings-tooltip.js @@ -42,9 +42,6 @@ harunaScale: `根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度.`, removeLiveWatermark: `删除观看直播时角落的水印.`, removeVideoTopMask: `删除视频里鼠标经过时出现在顶端的标题覆盖层.`, - forceWide: `对主站强制使用宽屏样式, 将在宽度达到1300px时启用. 此功能的适用范围为屏幕宽度介于1300px1400px的设备. -原有的宽屏样式会在宽度超过1400px时自动启用, 如果你的屏幕宽度大于1400px, 则没有必要开启此功能. -非宽屏样式下, 首页视频排行为2行3列; 宽屏样式下, 首页视频排行为2行4列.`, removeAds: `删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.`, watchLaterRedirect: `将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面.`, hideTopSearch: `将搜索框的推荐词替换为搜索.`,