mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
commit
9f4e62f509
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@ -68,6 +68,7 @@
|
|||||||
"repo",
|
"repo",
|
||||||
"repost",
|
"repost",
|
||||||
"reposts",
|
"reposts",
|
||||||
|
"squirtle",
|
||||||
"superchat",
|
"superchat",
|
||||||
"tabindex",
|
"tabindex",
|
||||||
"truetype",
|
"truetype",
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
**注意事项**
|
**注意事项**
|
||||||
- 近期番剧区改版, 大部分视频功能都不支持番剧.
|
- 近期番剧区改版, 大部分视频功能都不支持番剧.
|
||||||
- 港澳台等地区限定内容一概不支持.
|
- 港澳台等地区限定内容一概不支持.
|
||||||
- 如果你只是来下载视频的, 不需要其他功能, 建议找个专门支持下载的软件/插件. 本脚本的下载视频如果下载失败我可懒得管.
|
- 如果你只是来下载视频的, 不需要其他功能, 建议找个专门支持下载的软件/插件. 本脚本的下载视频就是凑合用用的, 如果下载失败我可懒得管.
|
||||||
- 做好觉悟, 脚本开启后不能使用弹幕点赞和举报, 全景视频不能用鼠标拖拽视角(只能用键盘操作), 对性能也有较大影响.
|
- 做好觉悟, 脚本开启后不能使用弹幕点赞和举报, 全景视频不能用鼠标拖拽视角(只能用键盘操作), 对性能也有较大影响.
|
||||||
- 某些破坏性的大更新会使旧版脚本**完全**无法运行, 请及时检查更新.
|
- 某些破坏性的大更新会使旧版脚本**完全**无法运行, 请及时检查更新.
|
||||||
- 使用 aria2 RPC 时脚本管理器可能会提示"脚本试图访问跨域资源", 请选择"始终允许".
|
- 使用 aria2 RPC 时脚本管理器可能会提示"脚本试图访问跨域资源", 请选择"始终允许".
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -19,6 +19,27 @@
|
|||||||
|
|
||||||
| 时间 | 用户名 | 单号后4位 | 金额 |
|
| 时间 | 用户名 | 单号后4位 | 金额 |
|
||||||
| ------------------- | ------------- | --------- | ------ |
|
| ------------------- | ------------- | --------- | ------ |
|
||||||
|
| 2021.09.25 13:56:04 | T*n | 3051 | ¥2.55 |
|
||||||
|
| 2021.09.24 12:03:07 | ** | 7134 | ¥1.66 |
|
||||||
|
| 2021.09.23 15:46:45 | *涛 | 6217 | ¥1.00 |
|
||||||
|
| 2021.09.19 23:29:23 | *M | 5595 | ¥5.00 |
|
||||||
|
| 2021.09.16 22:38:31 | *俊 | 9954 | ¥10.00 |
|
||||||
|
| 2021.09.12 15:53:40 | 1*2 | 2582 | ¥5.00 |
|
||||||
|
| 2021.09.12 05:04:22 | Damokles | 0826 | ¥10.00 |
|
||||||
|
| 2021.09.11 13:49:10 | X*X | 9088 | ¥5.00 |
|
||||||
|
| 2021.09.11 04:03:50 | 匿名 | 5617 | ¥8.88 |
|
||||||
|
| 2021.09.08 11:01:34 | *锐 | 2023 | ¥1.00 |
|
||||||
|
| 2021.09.06 23:37:57 | 匿名 | 7988 | ¥5.00 |
|
||||||
|
| 2021.09.01 00:15:50 | *沅 | 3822 | ¥2.00 |
|
||||||
|
| 2021.09.01 00:09:40 | *申 | 7942 | ¥10.00 |
|
||||||
|
| 2021.08.31 16:02:14 | ChanJohann | 6165 | ¥5.00 |
|
||||||
|
| 2021.08.30 19:05:11 | superuser | 7591 | ¥10.00 |
|
||||||
|
| 2021.08.28 23:12:02 | *经 | 4613 | ¥2.00 |
|
||||||
|
| 2021.08.27 07:54:22 | *喲 | 2626 | ¥1.00 |
|
||||||
|
| 2021.08.26 16:00:53 | *毅 | 5904 | ¥10.00 |
|
||||||
|
| 2021.08.23 12:24:30 | *锋 | 5739 | ¥1.50 |
|
||||||
|
| 2021.08.23 09:49:45 | *原 | 7547 | ¥5.00 |
|
||||||
|
| 2021.08.22 23:03:13 | *涛 | 4972 | ¥66.00 |
|
||||||
| 2021.08.17 09:37:58 | 匿名 | 0602 | ¥10.00 |
|
| 2021.08.17 09:37:58 | 匿名 | 0602 | ¥10.00 |
|
||||||
| 2021.08.16 20:42:21 | 匿名 | 6994 | ¥1.00 |
|
| 2021.08.16 20:42:21 | 匿名 | 6994 | ¥1.00 |
|
||||||
| 2021.08.16 20:40:53 | 匿名 | 8715 | ¥5.00 |
|
| 2021.08.16 20:40:53 | 匿名 | 8715 | ¥5.00 |
|
||||||
|
|||||||
2
min/bangumi-timeline.vue.min.js
vendored
2
min/bangumi-timeline.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/blackboard.min.js
vendored
2
min/blackboard.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,t)=>{const r=async()=>{if(dq(".international-home")){const e=await SpinQuery.condition((()=>unsafeWindow["__INITIAL_STATE__"]),(e=>e!==undefined));return dqa(".first-screen .home-slide .item").slice(0,5).map(((t,r)=>{const i=t.querySelector("a").getAttribute("data-loc-id");return{url:e.locsData[i][r].url,title:t.querySelector(".title").textContent.trim(),isAd:Boolean(t.querySelector(".gg-icon,.bypb-icon")),imageUrl:t.querySelector("img").getAttribute("src").replace(/@.+$/,"")}}))}else{const e=dq(".chief-recommend-module .panel");const t=e.querySelector(".pic");const r=e.querySelectorAll(".title > a");return[...t.querySelectorAll("li")].map(((e,t)=>{const i=r[t];return{url:i.getAttribute("href"),title:i.innerText.trim(),isAd:Boolean(i.querySelector(".gg-pic")),imageUrl:e.querySelector("img").getAttribute("src").replace(/@.+$/,"")}}))}};return{export:{getBlackboards:r}}})();
|
(()=>(s,t)=>{const o=async()=>{const s=4694;const t=`https://api.bilibili.com/x/web-show/res/locs?pf=0&ids=${s}`;const{code:o,message:a,data:e}=await Ajax.getJson(t);if(o!==0){throw new Error(`获取活动卡片失败: ${a}`)}const r=e[s];return r.map((s=>({url:s.url,title:s.name,isAd:s.is_ad_loc,imageUrl:s.pic})))};return{export:{getBlackboards:o}}})();
|
||||||
2
min/blackboard.vue.min.js
vendored
2
min/blackboard.vue.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(a,r)=>{const i=`<div class=blackboards><div class=header><div class=title>活动</div><a class=more href=https://www.bilibili.com/blackboard/x/act_list/ target=_blank><icon type=mdi icon=dots-horizontal></icon>更多</a></div><input class="hidden-input blackboard-radio"type=radio name=blackboard v-for="(b, i) of blackboards":checked="i === 0":id="'blackboard' + i":data-index=i :key=i><div class=blackboard-cards><a class=blackboard-card target=_blank v-for="(b, i) of blackboards":key=i :href=b.url :title=b.title><dpi-img :src=b.imageUrl :alt=b.title :size="{width: 500, height: 250}":root=cardsContainer></dpi-img><div class=title>{{b.title}}</div></a></div><div class=jump-dots><label v-for="(b, i) of blackboards":for="'blackboard' + i":key=i><div class=jump-dot></div></label></div></div>`;r.applyStyleFromText(`.simple-home .blackboards{position:relative;display:grid;grid-template-areas:"header header" "cards cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .jump-dots{position:absolute;top:50%;left:8px;transform:translateY(-50%);grid-area:cards;align-self:center;justify-self:center}.simple-home .blackboards .jump-dots label{display:block}.simple-home .blackboards .jump-dots label:not(:last-child){margin-bottom:6px}.simple-home .blackboards .jump-dots .jump-dot{background-color:#8884;border:1px solid #8888;box-sizing:border-box;width:8px;height:20px;border-radius:8px;cursor:pointer}.simple-home .blackboards .blackboard-cards{grid-area:cards;--blackboard-width:568.5px;--blackboard-height:250px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden}.simple-home .blackboards .blackboard-cards .blackboard-card{width:100%;height:100%;position:relative;display:block;transition:.8s cubic-bezier(.44,.29,.13,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:100%;object-fit:fill;display:block;border-radius:12px}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);padding:4px 16px;color:#fff;background-color:#000a;font-size:14px;font-weight:700;border-radius:14px;white-space:nowrap;opacity:0}.simple-home .blackboards .blackboard-cards .blackboard-card:hover .title{opacity:1}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter((a=>!a.isAd));const i=dq(".blackboards");this.interval=setInterval((()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true}),5e3)}})}})();
|
(()=>(a,r)=>{const i=`<div class=blackboards><div class=header><div class=title>活动</div><a class=more href=https://www.bilibili.com/blackboard/x/act_list/ target=_blank><icon type=mdi icon=dots-horizontal></icon>更多</a></div><input class="hidden-input blackboard-radio"type=radio name=blackboard v-for="(b, i) of blackboards":checked="i === 0":id="'blackboard' + i":data-index=i :key=i><div class=blackboard-cards><a class=blackboard-card target=_blank v-for="(b, i) of blackboards":key=i :href=b.url :title=b.title><dpi-img :src=b.imageUrl :alt=b.title :size="{width: 500, height: 250}":root=cardsContainer></dpi-img><div class=title :title=b.title>{{b.title}}</div></a></div><div class=jump-dots><label v-for="(b, i) of blackboards":for="'blackboard' + i":key=i><div class=jump-dot></div></label></div></div>`;r.applyStyleFromText(`.simple-home .blackboards{position:relative;display:grid;grid-template-areas:"header header" "cards cards";grid-template-columns:8px 1fr;grid-template-rows:1fr 250px;row-gap:16px;column-gap:16px;align-self:start}.simple-home .blackboards .jump-dots{position:absolute;left:50%;bottom:0;transform:translateX(-50%);grid-area:cards;align-self:center;justify-self:center;display:flex;align-items:center}.simple-home .blackboards .jump-dots label{display:block;padding:8px 6px;cursor:pointer}.simple-home .blackboards .jump-dots .jump-dot{background-color:#8884;box-sizing:border-box;width:20px;height:8px;border-radius:8px}.simple-home .blackboards .blackboard-cards{display:flex;grid-area:cards;--blackboard-width:350px;--blackboard-height:250px;--image-height:197px;width:var(--blackboard-width);height:var(--blackboard-height);border-radius:16px;overflow:hidden;background-color:#fff;box-shadow:0 4px 8px 0 #0001}body.dark .simple-home .blackboards .blackboard-cards{background-color:#282828}.simple-home .blackboards .blackboard-cards .blackboard-card{flex:0 0 auto;width:100%;height:100%;position:relative;display:block;transition:.8s cubic-bezier(.44,.29,.13,1)}.simple-home .blackboards .blackboard-cards .blackboard-card img{width:100%;height:var(--image-height);object-fit:fill;display:block;border-radius:12px;transition-duration:inherit}.simple-home .blackboards .blackboard-cards .blackboard-card .title{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);padding:0 16px;font-size:14px;font-weight:700;border-radius:14px;max-width:var(--blackboard-width);box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}`,"blackboard-style");return{export:Object.assign({template:i},{components:{Icon:()=>r.importAsync("icon.vue"),"dpi-img":()=>r.importAsync("dpi-img.vue")},data(){return{blackboards:[],interval:0}},destroyed(){if(this.interval){clearInterval(this.interval)}},computed:{cardsContainer(){return this.$el.querySelector(".blackboard-cards")}},async mounted(){const{getBlackboards:a}=await r.importAsync("blackboard");this.blackboards=(await a()).filter((a=>!a.isAd));const i=dq(".blackboards");this.interval=setInterval((()=>{if(!document.hasFocus()||i.matches(".blackboards:hover")){return}const a=parseInt(dq(`.blackboard-radio:checked`).getAttribute("data-index"));let r;if(a===this.blackboards.length-1){r=0}else{r=a+1}dq(`.blackboard-radio[data-index='${r}']`).checked=true}),5e3)}})}})();
|
||||||
@ -15,12 +15,12 @@
|
|||||||
"auto-draw.min.js": "303469718E41C156C763AE085FC62B42AEFD654B7E6083DAF111C5D5EE4CA619",
|
"auto-draw.min.js": "303469718E41C156C763AE085FC62B42AEFD654B7E6083DAF111C5D5EE4CA619",
|
||||||
"auto-play.min.js": "67A4735A629EC325009C8F79838FC1A852AB9AF15DFF8A2B60F0F0943DC3A4A9",
|
"auto-play.min.js": "67A4735A629EC325009C8F79838FC1A852AB9AF15DFF8A2B60F0F0943DC3A4A9",
|
||||||
"auto-play-control.min.js": "2133E452091800D15F858CB9C26CE5D6AD3A9B46020EE669C39077843039B358",
|
"auto-play-control.min.js": "2133E452091800D15F858CB9C26CE5D6AD3A9B46020EE669C39077843039B358",
|
||||||
"bangumi-timeline.vue.min.js": "BDC87EB6BE6C5D12DC6E9C75813E5BB2174C4A2D43A657F55874B31A533BAD9C",
|
"bangumi-timeline.vue.min.js": "C24D3F9D45C57ED653F085BA3A9E9B67296F4E1D1E16215D9C5206DB2D48A48C",
|
||||||
"batch-download.min.js": "044D6945486C5C7E76B8E6C2F98973F4D7C554BE0A09DB2055C9030B284C1B78",
|
"batch-download.min.js": "044D6945486C5C7E76B8E6C2F98973F4D7C554BE0A09DB2055C9030B284C1B78",
|
||||||
"batch-warning.min.js": "15A2134D855D9098B9485AA8023B5D98838F67D18FAB414B0C1FCD32F9BD05DD",
|
"batch-warning.min.js": "15A2134D855D9098B9485AA8023B5D98838F67D18FAB414B0C1FCD32F9BD05DD",
|
||||||
"biliplus-redirect.min.js": "EEFF7EE484A8D214E8FA110694E99F8BB62BD7263D1458DC83E7047F4CD6B9D4",
|
"biliplus-redirect.min.js": "EEFF7EE484A8D214E8FA110694E99F8BB62BD7263D1458DC83E7047F4CD6B9D4",
|
||||||
"blackboard.min.js": "1B48B1630D016D3F91B4804FBB73E299696E2BCDB3498FF1191B5A86B48CF9DE",
|
"blackboard.min.js": "09E24A83A4B0AFDC1AFC22CD48E3DB443B557B432C147A9B8E64635983200CB7",
|
||||||
"blackboard.vue.min.js": "4B5AA62C98113E4280DE14B970C1DD60DE73CE40AD6A808FAE891F9ACC9311CF",
|
"blackboard.vue.min.js": "3AA5E607BBB54CC8302741EFDBB03D43CBEEA1DC045A17E9F72C524862033CB2",
|
||||||
"blur-video-control.min.css": "B72FA7AD198ED1C9A9620A83881441F96F9FF3083ED12203A324B9753A7CCFFD",
|
"blur-video-control.min.css": "B72FA7AD198ED1C9A9620A83881441F96F9FF3083ED12203A324B9753A7CCFFD",
|
||||||
"blur-video-control.min.js": "F5C4C5E45BEB5BB671788FB72677FE121D6834C775912D7B1BCFE4A4EAFA599A",
|
"blur-video-control.min.js": "F5C4C5E45BEB5BB671788FB72677FE121D6834C775912D7B1BCFE4A4EAFA599A",
|
||||||
"bpx-player-adaptor.min.js": "CCB4037F9925C7605AB54BE1FD7A9E48BE2493FEE1633E40AE79DF520AAAF3F6",
|
"bpx-player-adaptor.min.js": "CCB4037F9925C7605AB54BE1FD7A9E48BE2493FEE1633E40AE79DF520AAAF3F6",
|
||||||
@ -33,7 +33,7 @@
|
|||||||
"collapse-live-side-bar.min.js": "9B4296F88C32FD081E4FD0DD48B4353C243A423446CF1CA047EB3B574D597F80",
|
"collapse-live-side-bar.min.js": "9B4296F88C32FD081E4FD0DD48B4353C243A423446CF1CA047EB3B574D597F80",
|
||||||
"column-image-exporter.min.js": "C8FA96C64E21D0195D95F1B7A5E67EFFC778DD46E2FCB4ACBE69C48E76B5E046",
|
"column-image-exporter.min.js": "C8FA96C64E21D0195D95F1B7A5E67EFFC778DD46E2FCB4ACBE69C48E76B5E046",
|
||||||
"combo-like.min.js": "E32FE23747479132F90C3D66CA6EB78031B4F7388F77CC56668E41B3F05FE954",
|
"combo-like.min.js": "E32FE23747479132F90C3D66CA6EB78031B4F7388F77CC56668E41B3F05FE954",
|
||||||
"comment.min.css": "B713BFCF8A251A65B502C1B522E00DD1D7B085C8F475FD23235F34172B16A9C8",
|
"comment.min.css": "8D8B635B1020DDCCCF748F34B4EEC60CBB409166C53F70800836960B40D0BD05",
|
||||||
"comment.min.js": "1634EEADF5BF2A29E6D39AFDA17804AB2442CDA3BCB0B4D9DBAA6F6E7E965F72",
|
"comment.min.js": "1634EEADF5BF2A29E6D39AFDA17804AB2442CDA3BCB0B4D9DBAA6F6E7E965F72",
|
||||||
"comment-apis.min.js": "D0E6EF724B5C068AD55EE9F740090A782447CE373080848FCA24879FC56E5E8B",
|
"comment-apis.min.js": "D0E6EF724B5C068AD55EE9F740090A782447CE373080848FCA24879FC56E5E8B",
|
||||||
"comment-dark.min.css": "E980508E86203743C36FEE4F7149BFF53961ECBC4EC140E8C162D18D395B940A",
|
"comment-dark.min.css": "E980508E86203743C36FEE4F7149BFF53961ECBC4EC140E8C162D18D395B940A",
|
||||||
@ -44,9 +44,9 @@
|
|||||||
"copy-feeds-link.min.js": "36D7C804F088A6C6905CD91C5F9D2D58E20634C7E0814AE03740CCEC790F6BB4",
|
"copy-feeds-link.min.js": "36D7C804F088A6C6905CD91C5F9D2D58E20634C7E0814AE03740CCEC790F6BB4",
|
||||||
"custom-control-background.min.css": "1981FD2BF3B17ECF33F98D5DEDAF0D32ACBE9532A51FDB70822286991AB98EF3",
|
"custom-control-background.min.css": "1981FD2BF3B17ECF33F98D5DEDAF0D32ACBE9532A51FDB70822286991AB98EF3",
|
||||||
"custom-control-background.min.js": "483F57DDD56F5B3A77C9CB35EB7CA191BF34CB6B3EEF5E12A4C10A42ADE563A2",
|
"custom-control-background.min.js": "483F57DDD56F5B3A77C9CB35EB7CA191BF34CB6B3EEF5E12A4C10A42ADE563A2",
|
||||||
"custom-navbar.min.css": "66B12A504E09B5CBAD985668A09887322210A9525279EFF0611290CCDE518ED2",
|
"custom-navbar.min.css": "3ADECA5A15ABD723ADE914BECC5D351A2ACA672A1C02CEA89C3F6AB0044B8A87",
|
||||||
"custom-navbar.min.html": "1F95ABCE9F19727CAF3B48C40E517EA4C2F602E9C2A73BD822B56BF91AB3F631",
|
"custom-navbar.min.html": "1F95ABCE9F19727CAF3B48C40E517EA4C2F602E9C2A73BD822B56BF91AB3F631",
|
||||||
"custom-navbar.min.js": "2A7B441224DE0D9C91A787EE99629D8F59919CB3050FE0B0E246758E1DAE2878",
|
"custom-navbar.min.js": "F82FC5A3A7A794A0F77433DDA5AFADD9B4C72CE97073EC707EF146F040D504E7",
|
||||||
"custom-navbar-activities.min.js": "A7AB41C75EFEF45F3186D5A110629FA98F16C552E3B6F58BA0A735CB86E58547",
|
"custom-navbar-activities.min.js": "A7AB41C75EFEF45F3186D5A110629FA98F16C552E3B6F58BA0A735CB86E58547",
|
||||||
"custom-navbar-blank.min.js": "E8F08DA7CD2C67F9D064B959A64CFC6658103DBCBE2B9B58D978A1742E02D829",
|
"custom-navbar-blank.min.js": "E8F08DA7CD2C67F9D064B959A64CFC6658103DBCBE2B9B58D978A1742E02D829",
|
||||||
"custom-navbar-category.min.js": "F5E2A5D316D372BF43769D20095C4700A3A3E5F63CE3607F17030AF0784F1D34",
|
"custom-navbar-category.min.js": "F5E2A5D316D372BF43769D20095C4700A3A3E5F63CE3607F17030AF0784F1D34",
|
||||||
@ -58,7 +58,7 @@
|
|||||||
"custom-navbar-logo.min.js": "CE70A2E60EBDB145FC07D97A1DDABD1077DAA66CE83574B97788216D788BA4C5",
|
"custom-navbar-logo.min.js": "CE70A2E60EBDB145FC07D97A1DDABD1077DAA66CE83574B97788216D788BA4C5",
|
||||||
"custom-navbar-messages.min.js": "17F42493B555476F3F1E4A6BF0E3AD0F0B4D8742F235B0FF60BD450AAA97588E",
|
"custom-navbar-messages.min.js": "17F42493B555476F3F1E4A6BF0E3AD0F0B4D8742F235B0FF60BD450AAA97588E",
|
||||||
"custom-navbar-rank.min.js": "3661DA6EB1485C71FCDC6BA50EF432252AB7019C9398031D4243C679183466E1",
|
"custom-navbar-rank.min.js": "3661DA6EB1485C71FCDC6BA50EF432252AB7019C9398031D4243C679183466E1",
|
||||||
"custom-navbar-search-box.min.js": "93FC05E77233A288D78200DE2824E9766D8D7DC9EFC2A5E724B095C3253E7288",
|
"custom-navbar-search-box.min.js": "E1813FD6A9B597A1E906C91DF4377006227ED50C6ADB1CF411A1779AE0C4F73B",
|
||||||
"custom-navbar-settings.min.js": "B41F2AF7AF10B968472DCF2539E9C530F4117D7D3811378D2DE163536CF31E51",
|
"custom-navbar-settings.min.js": "B41F2AF7AF10B968472DCF2539E9C530F4117D7D3811378D2DE163536CF31E51",
|
||||||
"custom-navbar-simple-link.min.js": "51E2FDD06832E585E86884890D1DC6321A802D43332D7E7B5758A20BC1AB1E03",
|
"custom-navbar-simple-link.min.js": "51E2FDD06832E585E86884890D1DC6321A802D43332D7E7B5758A20BC1AB1E03",
|
||||||
"custom-navbar-subscriptions.min.js": "D99A25DE4ABB104FA95166F51EB4FEE9DFDC4AE162CF189ECBCF99CA2E5E0E6C",
|
"custom-navbar-subscriptions.min.js": "D99A25DE4ABB104FA95166F51EB4FEE9DFDC4AE162CF189ECBCF99CA2E5E0E6C",
|
||||||
@ -69,9 +69,9 @@
|
|||||||
"danmaku-converter.min.js": "C54666E9910A927B54051EAB7C3DB6F93C1F6010A47614A619AFD7487C3F7183",
|
"danmaku-converter.min.js": "C54666E9910A927B54051EAB7C3DB6F93C1F6010A47614A619AFD7487C3F7183",
|
||||||
"danmaku-segment.min.js": "43CC3236AFABA89BD0AE24D640809BE333772824E3994541AFC3CDDD9F881613",
|
"danmaku-segment.min.js": "43CC3236AFABA89BD0AE24D640809BE333772824E3994541AFC3CDDD9F881613",
|
||||||
"danmaku-send-bar.min.css": "F309FC17E7657BAA676D446458750D8069051617B44DD3D1457B4A9C519B2ED1",
|
"danmaku-send-bar.min.css": "F309FC17E7657BAA676D446458750D8069051617B44DD3D1457B4A9C519B2ED1",
|
||||||
"danmaku-send-bar.min.js": "3F635F4209092B6BA41865A945496861F4B1E0D9F2D31ABB5C021967B1B9FA19",
|
"danmaku-send-bar.min.js": "7F694676C4A4EA608C02981C2ABC27945270CC89C89F2F1FB66FD01327DD9066",
|
||||||
"dark.min.css": "0406EDF1A0549F6CD7B43D891CE373F395870950DB3E4719234138C3ACE2317C",
|
"dark.min.css": "6BAECA6516337A697B614422A6619D1E018B5A67B2170C9C3A6EB042D4947715",
|
||||||
"dark.user.css": "209259CD8781584CF3B392C67F22DA273E7F15E15FF3113E075E552C98324FBC",
|
"dark.user.css": "50E546B4C7419DC7D89EAE1CE419653F0F7E4C605FDACED8D23BDC5E926EB6C9",
|
||||||
"dark-color-scheme.min.js": "7C89C14ACEE44CCE2E402A63768A3B53251B4B1D82675DD85532AABB8F2082FA",
|
"dark-color-scheme.min.js": "7C89C14ACEE44CCE2E402A63768A3B53251B4B1D82675DD85532AABB8F2082FA",
|
||||||
"dark-important.min.css": "29FAC0857FB4BDF4EAD24582D4984471E80FC83EF9BD9A108B17D5AC5617DE75",
|
"dark-important.min.css": "29FAC0857FB4BDF4EAD24582D4984471E80FC83EF9BD9A108B17D5AC5617DE75",
|
||||||
"dark-navbar.min.css": "7FAD547E326B768904B3739C978DF86FFDDD5E5064FB8F490710D197CCC3018B",
|
"dark-navbar.min.css": "7FAD547E326B768904B3739C978DF86FFDDD5E5064FB8F490710D197CCC3018B",
|
||||||
@ -82,7 +82,7 @@
|
|||||||
"default-danmaku-settings.min.js": "901EA05F842932F436F0ABEAC99802D286575F9033CE078AA246FD1453B98998",
|
"default-danmaku-settings.min.js": "901EA05F842932F436F0ABEAC99802D286575F9033CE078AA246FD1453B98998",
|
||||||
"default-live-quality.min.js": "3DE4EC96DE1CB7F187E61B7045EC14EBBF74B1853A990B4FE32372F27D47F4E4",
|
"default-live-quality.min.js": "3DE4EC96DE1CB7F187E61B7045EC14EBBF74B1853A990B4FE32372F27D47F4E4",
|
||||||
"default-player-layout.min.js": "2F018C09DCCB9D0DD671ED4868A1EAC365D63CC51618EE076598C6624E3BEA7E",
|
"default-player-layout.min.js": "2F018C09DCCB9D0DD671ED4868A1EAC365D63CC51618EE076598C6624E3BEA7E",
|
||||||
"default-player-mode.min.js": "97798995F580FC6869CA7AD2A6134EEEC1FCCF4AEA69B7234642D6BF4F1A17DF",
|
"default-player-mode.min.js": "76BBFE1C953134B744ADB70038C0EAA0DD53291B1879555A7513CBDB4411365D",
|
||||||
"default-video-quality.min.js": "20C0F41F683D685CCD22BD91F0EB4C2227146DD5586EB65388EE8FA97F46F7D2",
|
"default-video-quality.min.js": "20C0F41F683D685CCD22BD91F0EB4C2227146DD5586EB65388EE8FA97F46F7D2",
|
||||||
"default-video-speed.min.js": "720B588D410C267C1EE411927C9FC9FBBAE693A6938134416962E7B5A0682D25",
|
"default-video-speed.min.js": "720B588D410C267C1EE411927C9FC9FBBAE693A6938134416962E7B5A0682D25",
|
||||||
"disable-danmaku-highlights.min.js": "1F8C7267B7015ABB737D2457FCCC2E48CC31364E63ACF330770D61B152C9ABC6",
|
"disable-danmaku-highlights.min.js": "1F8C7267B7015ABB737D2457FCCC2E48CC31364E63ACF330770D61B152C9ABC6",
|
||||||
@ -98,7 +98,7 @@
|
|||||||
"download-video.min.css": "ABED6E1EE0F75AE64E1698FEF98CE9DF94EBDC707AABE4C305108CA73156C7A5",
|
"download-video.min.css": "ABED6E1EE0F75AE64E1698FEF98CE9DF94EBDC707AABE4C305108CA73156C7A5",
|
||||||
"download-video.min.html": "BBF00C1AE2C6C0FE534F72C9C7D513AB1039E2390C1E5742D452296F52AAA4F3",
|
"download-video.min.html": "BBF00C1AE2C6C0FE534F72C9C7D513AB1039E2390C1E5742D452296F52AAA4F3",
|
||||||
"download-video.min.js": "FC561BFA1B57590209892BDC4AB982F09A7D7B99E91D7A25BDD7316014243E9D",
|
"download-video.min.js": "FC561BFA1B57590209892BDC4AB982F09A7D7B99E91D7A25BDD7316014243E9D",
|
||||||
"dpi-img.vue.min.js": "791188F92FC0FD6257F26F27379A6B4EF3447C04355A6B6EA8B330008A238FCD",
|
"dpi-img.vue.min.js": "006E641C11D51051F13BDE630DBC57E4F9FA58E3F106D6D073FBB7A100E9D222",
|
||||||
"expand-danmaku.min.js": "1D855006799D56AF09697EB8F6488303DB05811E8F3C84298AC08A4FE3A4CFA1",
|
"expand-danmaku.min.js": "1D855006799D56AF09697EB8F6488303DB05811E8F3C84298AC08A4FE3A4CFA1",
|
||||||
"expand-description.min.css": "4B8023CD9C6AFFD65A8FB33F3735480AF1151DC1F3E2AC551442266268A6F873",
|
"expand-description.min.css": "4B8023CD9C6AFFD65A8FB33F3735480AF1151DC1F3E2AC551442266268A6F873",
|
||||||
"expand-description.min.js": "528ED5892BDDE16EAA4F60BD962FCC7A70E0E4E322ED3F798AFC6D72D6C3C99B",
|
"expand-description.min.js": "528ED5892BDDE16EAA4F60BD962FCC7A70E0E4E322ED3F798AFC6D72D6C3C99B",
|
||||||
@ -132,13 +132,13 @@
|
|||||||
"full-tweets-title.min.js": "5A32D349D6DDD4F1DE73175D9A0AFE520B316F73A852B2BBE6A0436C8D8CBBB2",
|
"full-tweets-title.min.js": "5A32D349D6DDD4F1DE73175D9A0AFE520B316F73A852B2BBE6A0436C8D8CBBB2",
|
||||||
"gbk.min.js": "0EDFCB94F519365A8CCA9BF3AECE57DC6DB273EF3F41545095B8F03625782F0D",
|
"gbk.min.js": "0EDFCB94F519365A8CCA9BF3AECE57DC6DB273EF3F41545095B8F03625782F0D",
|
||||||
"get-number.min.js": "E644267B8A2DCEF2577BB9270F5C738BCE89C1C128071EBD3645903A930E08E0",
|
"get-number.min.js": "E644267B8A2DCEF2577BB9270F5C738BCE89C1C128071EBD3645903A930E08E0",
|
||||||
"gui-settings.min.css": "1B1D6F4FFE7E3FEB26CB0FD5F19A3EF2F6C9AD7356F2D56660E75DE1061DE201",
|
"gui-settings.min.css": "54ABFAE9B7A91CB8D7D2A6D3FAB844C256DFC2286710D592E85FB9A8479823F2",
|
||||||
"gui-settings.min.html": "ED34D4DF52333541FDF96C47091924E6016655E8DF82D75871E3B99D70F46AC5",
|
"gui-settings.min.html": "93F0A4FA7D83E5E9E71F919D5C26D8413BCDCA51AED0DA4C3D821B3ABACEBB02",
|
||||||
"gui-settings.min.js": "3AF95BAF62666E0C2FE990FB6F15A3A4B459F42F49E04FFF06848CFFEC350B12",
|
"gui-settings.min.js": "7E18926B9A9F0BDFDFD8755EAF237951195DA849835A6C266F15E3A5A191EB40",
|
||||||
"haruna-scale.min.js": "2410662D47006D2AC49FE43DEB85F8D2C1B6F6D353DD767C2F11F7802A81F605",
|
"haruna-scale.min.js": "2410662D47006D2AC49FE43DEB85F8D2C1B6F6D353DD767C2F11F7802A81F605",
|
||||||
"hide-bangumi-reviews.min.js": "0E8D100A27D523008041BAF95B7809855B505F4C02D4EE32CC62917528E46DBE",
|
"hide-bangumi-reviews.min.js": "0E8D100A27D523008041BAF95B7809855B505F4C02D4EE32CC62917528E46DBE",
|
||||||
"hide-bangumi-sponsors.min.js": "61CF35F5F1DDD9BA068196E4D02C8F206178D58A6DFD43DE5024A7AE50A2029D",
|
"hide-bangumi-sponsors.min.js": "61CF35F5F1DDD9BA068196E4D02C8F206178D58A6DFD43DE5024A7AE50A2029D",
|
||||||
"hide-banner.min.css": "68D798C7FE5D4C94B6BA1FB0075EFDFA285EAF1B04D4F54A8D37B031B560994B",
|
"hide-banner.min.css": "FB801F7DD61622B0DFD1AD48AC6B3A5CC649D6A949E677423D957D7BC9FCE762",
|
||||||
"hide-banner.min.js": "1FC0511F83C87E07F2BDE94A10D7AB2F7067E77AC93261D563BB699BECFB035D",
|
"hide-banner.min.js": "1FC0511F83C87E07F2BDE94A10D7AB2F7067E77AC93261D563BB699BECFB035D",
|
||||||
"hide-category.min.css": "2EB4AB96C9EA12E91910AB3F1EAAFD76CFED77890CF2138232388415E1418C46",
|
"hide-category.min.css": "2EB4AB96C9EA12E91910AB3F1EAAFD76CFED77890CF2138232388415E1418C46",
|
||||||
"hide-category.min.js": "343424E56C09D06ECC9CEFEF79B8F780B7E1D9082F1878CF3D35ADD33FA294D6",
|
"hide-category.min.js": "343424E56C09D06ECC9CEFEF79B8F780B7E1D9082F1878CF3D35ADD33FA294D6",
|
||||||
@ -148,13 +148,13 @@
|
|||||||
"hide-related-videos.min.js": "B0FF19C6080EB7C3D64C3BFF91FDF68D70FEC4E5445717175E74245A2DEABBB9",
|
"hide-related-videos.min.js": "B0FF19C6080EB7C3D64C3BFF91FDF68D70FEC4E5445717175E74245A2DEABBB9",
|
||||||
"hide-top-search.min.js": "36FF3FCBEC3ABB61E2458AA94C0B9F59224AE38A483B354FB17C671190592892",
|
"hide-top-search.min.js": "36FF3FCBEC3ABB61E2458AA94C0B9F59224AE38A483B354FB17C671190592892",
|
||||||
"home-hidden.min.css": "BF0142F2C96EE72EBC76D5D4909A5CE5BA382C142F19E5E54248A177D9585E99",
|
"home-hidden.min.css": "BF0142F2C96EE72EBC76D5D4909A5CE5BA382C142F19E5E54248A177D9585E99",
|
||||||
"home-hidden.min.js": "5326DE89A99FA3913A89DF7713DACDBB41E3BD89FD46BCDA322535949373FDF3",
|
"home-hidden.min.js": "71B082DFC0EF6C1996FAD37699A4F4F4AF64B7AB691167F5462B2ED13F82206B",
|
||||||
"home-video.vue.min.js": "ACD3918903369692BF0AA0ADBE3E77B8D6B942EA1DAAB7138B362D263E9DC1F4",
|
"home-video.vue.min.js": "ACD3918903369692BF0AA0ADBE3E77B8D6B942EA1DAAB7138B362D263E9DC1F4",
|
||||||
"horizontal-scroll.min.js": "BCD68AB83706669D24A782219F3D45EA0AF0A9C0317309CB003924444452519C",
|
"horizontal-scroll.min.js": "BCD68AB83706669D24A782219F3D45EA0AF0A9C0317309CB003924444452519C",
|
||||||
"i18n.de-DE.min.js": "540CD614C274A80578B8F759B437675ECFEB6C16DF62BA0E39AB113F26C9852F",
|
"i18n.de-DE.min.js": "540CD614C274A80578B8F759B437675ECFEB6C16DF62BA0E39AB113F26C9852F",
|
||||||
"i18n.en-US.min.js": "481D6038EC4EEEE518217B03E32850A339F9D7BC4E55EC471BA5C26B2464D6B1",
|
"i18n.en-US.min.js": "481D6038EC4EEEE518217B03E32850A339F9D7BC4E55EC471BA5C26B2464D6B1",
|
||||||
"i18n.ja-JP.min.js": "8270B398C684EE98459C3C73BC9B2BB8D28E8F2E2E9833AA788C82DA20659830",
|
"i18n.ja-JP.min.js": "8270B398C684EE98459C3C73BC9B2BB8D28E8F2E2E9833AA788C82DA20659830",
|
||||||
"i18n.min.css": "FAA94965C122C7F1DE6DC82C298E50FACE1C8C37256605BD7B3FD4AB56037BCB",
|
"i18n.min.css": "E8D2E9E5231CE9C1AB581FC0C0341057C095B65E635B0B81DF426841AD0E8A47",
|
||||||
"i18n.min.js": "369DC13D72758D1DF42387931D7E0165F22CF05EBB8DC24F800EF463472A1600",
|
"i18n.min.js": "369DC13D72758D1DF42387931D7E0165F22CF05EBB8DC24F800EF463472A1600",
|
||||||
"i18n.zh-TW.min.js": "803F67270809E3258E2B302ADE542B12EF222C83EDC67FB8C68301C5F4E3A1CC",
|
"i18n.zh-TW.min.js": "803F67270809E3258E2B302ADE542B12EF222C83EDC67FB8C68301C5F4E3A1CC",
|
||||||
"icon.vue.min.js": "15324A41E910361F9A245D6B3EB16019075EE460287570CBEA0F12AC71E1F158",
|
"icon.vue.min.js": "15324A41E910361F9A245D6B3EB16019075EE460287570CBEA0F12AC71E1F158",
|
||||||
@ -166,8 +166,8 @@
|
|||||||
"index.min.html": "94B83D9EBB9005C1286A7E0759A7683932F8DADA20D07E5E9D8FF867B04D4B95",
|
"index.min.html": "94B83D9EBB9005C1286A7E0759A7683932F8DADA20D07E5E9D8FF867B04D4B95",
|
||||||
"key-binding-presets.min.js": "550BC7B2441DFE4744B54A161207EA4B5DB949AB7B3C377C66F549E710D8CE22",
|
"key-binding-presets.min.js": "550BC7B2441DFE4744B54A161207EA4B5DB949AB7B3C377C66F549E710D8CE22",
|
||||||
"key-bindings.min.js": "88736417D177F7F6173D087441220979B76C63A510BE75E09DF4B27D4DEBFB57",
|
"key-bindings.min.js": "88736417D177F7F6173D087441220979B76C63A510BE75E09DF4B27D4DEBFB57",
|
||||||
"keymap.min.css": "B66149AAE8D4267E413A26F0577C4FCE4C0D13ECBB9B573916FDA8E58099C939",
|
"keymap.min.css": "331DE00E7A7A9B7727CA7F4A1411158477A8EE5EE38E596DEEE9B6ADB4C0B321",
|
||||||
"keymap.min.js": "CE9AB2A4D39F14858C5A29942FB46CD4C65A522660C40D04E3EE45C6A5598B88",
|
"keymap.min.js": "7767C27DE7A8BE8B784D94A876D1CBF3CAC7D209AF8687AE211601C94522B143",
|
||||||
"live-control-bar.min.js": "5AA182EB22062DEB54D727E7B42F6DA8535F982DA303963BA9AD4BE19889467A",
|
"live-control-bar.min.js": "5AA182EB22062DEB54D727E7B42F6DA8535F982DA303963BA9AD4BE19889467A",
|
||||||
"live-pip.min.js": "2112A21139895537DCD4DDA6EC2719B31D312E8C34BBBA690D388FB24200C5D9",
|
"live-pip.min.js": "2112A21139895537DCD4DDA6EC2719B31D312E8C34BBBA690D388FB24200C5D9",
|
||||||
"live-socket.min.js": "8AB690D1979FB64E7BA6126417700C0DD96C0E5C43712543590753B8344996C8",
|
"live-socket.min.js": "8AB690D1979FB64E7BA6126417700C0DD96C0E5C43712543590753B8344996C8",
|
||||||
@ -187,13 +187,14 @@
|
|||||||
"no-banner.min.css": "DA096F94E7FA26992F3F71245E704D69A1C222D0ADA6F1990FA5D948507CE15F",
|
"no-banner.min.css": "DA096F94E7FA26992F3F71245E704D69A1C222D0ADA6F1990FA5D948507CE15F",
|
||||||
"no-live-autoplay.min.js": "31917BE96EE9B8F8AC7E5FA17465AC8873ED7BB48AC3A44F4374E79C85363B70",
|
"no-live-autoplay.min.js": "31917BE96EE9B8F8AC7E5FA17465AC8873ED7BB48AC3A44F4374E79C85363B70",
|
||||||
"no-mini-video-autoplay.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
"no-mini-video-autoplay.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
||||||
"notify-new-version.min.js": "D922DCE08CFD1729BB778885E5EFB905FBE23A2878437AE2E9CF2263C22E196B",
|
"notify-new-version.min.js": "08A418212A8078EE83864E3AED782D597DE8E41AA2E4DD4B7D6FBBF83696B627",
|
||||||
"online-info-row.vue.min.js": "48D42BADAD3F52BAFE20E2810567ED404A82DA78C8B7ECEB97C0D3E76CC61138",
|
"online-info-row.vue.min.js": "A1BE0481CEE968FE2239B05B9473751B4E9931BE5EF40D677E46B3C0ED43C974",
|
||||||
"outer-watchlater.min.css": "BB56A80224F7B37869C17C976C301623C47BBCCDB18F7E009A4F97B6C685C0DC",
|
"outer-watchlater.min.css": "BB56A80224F7B37869C17C976C301623C47BBCCDB18F7E009A4F97B6C685C0DC",
|
||||||
"outer-watchlater.min.js": "5FC13134BBC69E8A1061A33D4BE6ED24508A8093D569B1CF33680AF2DE1BF86E",
|
"outer-watchlater.min.js": "5FC13134BBC69E8A1061A33D4BE6ED24508A8093D569B1CF33680AF2DE1BF86E",
|
||||||
"override-navbar.min.css": "E5AA612841281169CA367A238FB934F807900A385CE2298B7352FF3CA4623757",
|
"override-navbar.min.css": "E5AA612841281169CA367A238FB934F807900A385CE2298B7352FF3CA4623757",
|
||||||
"override-navbar.min.js": "0FF50371A02F47EE384515544EB87D34CEE2DB449B9B864B5627A9645F921DAB",
|
"override-navbar.min.js": "0FF50371A02F47EE384515544EB87D34CEE2DB449B9B864B5627A9645F921DAB",
|
||||||
"pako-inflate.min.js": "1B89766B342D4A561B0CF7D5A68B2900B6D1772E507EEB1AF56FA7CABE40BCEC",
|
"pako-inflate.min.js": "1B89766B342D4A561B0CF7D5A68B2900B6D1772E507EEB1AF56FA7CABE40BCEC",
|
||||||
|
"player-agent.min.js": "FCD128055BD5414ED97B49E44000D6EE74C1FA181582C1BD7E433BAD5F1B05C0",
|
||||||
"player-context-menu.min.js": "D84439ABC219CBCDF4C431DAA73E799265485F3C5C07AE57F9A251C7CF967E4A",
|
"player-context-menu.min.js": "D84439ABC219CBCDF4C431DAA73E799265485F3C5C07AE57F9A251C7CF967E4A",
|
||||||
"player-focus.min.js": "9A290D6749E68A4A88563983413A296BFA9B5C18B978F9CF80799196AEC0F9EE",
|
"player-focus.min.js": "9A290D6749E68A4A88563983413A296BFA9B5C18B978F9CF80799196AEC0F9EE",
|
||||||
"player-on-top.min.js": "0D9AA8561E97A6FFCEABDA206B6A57EB87C1B3EF5D0D53EDABA3ED5EFB0DF687",
|
"player-on-top.min.js": "0D9AA8561E97A6FFCEABDA206B6A57EB87C1B3EF5D0D53EDABA3ED5EFB0DF687",
|
||||||
@ -202,13 +203,13 @@
|
|||||||
"quality-errors.min.js": "A691A407FC4F80C6B2D243CBFADC636FCFFC4DC35B9E305AEF4184AD3ECFC56B",
|
"quality-errors.min.js": "A691A407FC4F80C6B2D243CBFADC636FCFFC4DC35B9E305AEF4184AD3ECFC56B",
|
||||||
"quick-favorite.min.css": "7829AE09EC0F9057C3970CDF4CEADC76A86269C1DA714E7BC64E6D783621076B",
|
"quick-favorite.min.css": "7829AE09EC0F9057C3970CDF4CEADC76A86269C1DA714E7BC64E6D783621076B",
|
||||||
"quick-favorite.min.js": "0E9F058A2843A0D7F860E78E157FAA1A3DA8E63F5E12C2A35D4BFC48E62D284C",
|
"quick-favorite.min.js": "0E9F058A2843A0D7F860E78E157FAA1A3DA8E63F5E12C2A35D4BFC48E62D284C",
|
||||||
"rank-list.vue.min.js": "EC5DDEE0798F779687676E7FDE251FB29A7A0079EACA1994DD73A802C742055F",
|
"rank-list.vue.min.js": "A47750316E45D61F2AA56FDDD08F1D2D715BA103B42C4000D0C348020998737F",
|
||||||
"record-live-danmaku.min.js": "CF1C55683CB20688FAA39B9150144F5C907D8150BF42C1AD2729FB44AB06A604",
|
"record-live-danmaku.min.js": "CF1C55683CB20688FAA39B9150144F5C907D8150BF42C1AD2729FB44AB06A604",
|
||||||
"record-live-danmaku.vue.min.js": "CFBB560D1C9C1D3510A4217E141FEDD4A7F227F3825859BB7F729544A1B86DAC",
|
"record-live-danmaku.vue.min.js": "CFBB560D1C9C1D3510A4217E141FEDD4A7F227F3825859BB7F729544A1B86DAC",
|
||||||
"remember-video-speed.min.js": "207AB95275A06977CE46AE37C5892FB7823A696C67DC40B4B13EAE82DED330C6",
|
"remember-video-speed.min.js": "207AB95275A06977CE46AE37C5892FB7823A696C67DC40B4B13EAE82DED330C6",
|
||||||
"remove-guide-popup.min.js": "801E2EAA47B55CBBF8DF2570781A76C411BB3EA3A8C3A87BB0A8369FF9E6D9EB",
|
"remove-guide-popup.min.js": "801E2EAA47B55CBBF8DF2570781A76C411BB3EA3A8C3A87BB0A8369FF9E6D9EB",
|
||||||
"remove-promotions.min.css": "DE7F28B81D660117F5C515D6F6360CD63F1CAF31AF06DE8BEF492FD3552C4B60",
|
"remove-promotions.min.css": "0BF20D07A075A2F6F2B59A3234B53FCBDC87D4A3640707B604B187D681100758",
|
||||||
"remove-promotions.min.js": "AE5C33D42077619647218BF635B7EBF371966C0245641856E18CD0F4039D225A",
|
"remove-promotions.min.js": "A59D69F284C865B414B63B855EE25EC6614E1205C38267BC76E3C034A1C1751D",
|
||||||
"remove-top-mask.min.js": "AD087C766DF146FDF8DCFF5F98950DBFAA4A43E3848FEEA0EC8D3A0A5CD276EA",
|
"remove-top-mask.min.js": "AD087C766DF146FDF8DCFF5F98950DBFAA4A43E3848FEEA0EC8D3A0A5CD276EA",
|
||||||
"remove-video-popup.min.js": "97E6C386E85D79BFA9FA86422F06FB7723DED0AA25F27A7F94BCFB222AF7865E",
|
"remove-video-popup.min.js": "97E6C386E85D79BFA9FA86422F06FB7723DED0AA25F27A7F94BCFB222AF7865E",
|
||||||
"remove-vote-popup.min.js": "00FB123A3E41AC0EB8D35F1C37E2E6A38C87E6DFD8666488E3A37E8B6B12BABF",
|
"remove-vote-popup.min.js": "00FB123A3E41AC0EB8D35F1C37E2E6A38C87E6DFD8666488E3A37E8B6B12BABF",
|
||||||
@ -229,23 +230,23 @@
|
|||||||
"settings-tooltip.loader.min.js": "477DE4B69F477D67BCBC72CE33C91986EB2A5620D6F2D1D8367BBC388C5E3E5C",
|
"settings-tooltip.loader.min.js": "477DE4B69F477D67BCBC72CE33C91986EB2A5620D6F2D1D8367BBC388C5E3E5C",
|
||||||
"settings-tooltip.min.css": "031B4E11744977C54496A3DB0FAB794401DC1FED2E53D9F729DA4218CD98E8D5",
|
"settings-tooltip.min.css": "031B4E11744977C54496A3DB0FAB794401DC1FED2E53D9F729DA4218CD98E8D5",
|
||||||
"settings-tooltip.min.js": "C7F9A79EB623BF58CB81DE4A9E74FC6C2EDB2613403EFE6D09B36FB460159A13",
|
"settings-tooltip.min.js": "C7F9A79EB623BF58CB81DE4A9E74FC6C2EDB2613403EFE6D09B36FB460159A13",
|
||||||
"settings-tooltip.zh-CN.min.js": "0B4B075F32E0ED6E5A73232D318FDFA8DD207B94EDF4ABC3EB636708583FC2DA",
|
"settings-tooltip.zh-CN.min.js": "21CD103B470AC97288304D4471D733E43BD89E82A2D2A6CD4CF70F4D448293D9",
|
||||||
"show-cover-before-play.min.css": "E4050D66F8014029270CB5A4DEFDE2F847B095BA9ED4274BFED3E131B737B06D",
|
"show-cover-before-play.min.css": "E4050D66F8014029270CB5A4DEFDE2F847B095BA9ED4274BFED3E131B737B06D",
|
||||||
"show-cover-before-play.min.js": "5614929DD8CEB3B11D184F037235D91B741AD167B08A4F5B7341C6A50A0838FF",
|
"show-cover-before-play.min.js": "59A0FB3D33643BAA3E11813ABF290B26F286CC4FF19EE0089A90DFE3FE768BCF",
|
||||||
"show-dead-video-title.min.js": "5B968442E71F947F70C57C9FDA083935200CBA9B1038131F1587E70A2B723798",
|
"show-dead-video-title.min.js": "5B968442E71F947F70C57C9FDA083935200CBA9B1038131F1587E70A2B723798",
|
||||||
"simple-home.vue.min.js": "A1036F3AF1D4BB1BBADAC642691D18D158C47FC409BE64B9CB978E32D9E5DCAF",
|
"simple-home.vue.min.js": "EFF4A221F6A94B3AA6FEACF840699B691017B771E532C17963194C21C11DD488",
|
||||||
"simple-home-bangumi-category.vue.min.js": "5E0DBCA5694737CA6FFFEABB28B3FA29716C62355D8FBF14D86C4810BCF53E91",
|
"simple-home-bangumi-category.vue.min.js": "5E0DBCA5694737CA6FFFEABB28B3FA29716C62355D8FBF14D86C4810BCF53E91",
|
||||||
"simple-home-categories.vue.min.js": "1A61EE248042E90865DDD1C23FA3981E551285EF7FC50FB8BA4944582659562E",
|
"simple-home-categories.vue.min.js": "D80410884A163ACAF39C71640B21F69FA0330290ECCFD53A9591FBC777D07684",
|
||||||
"simple-home-feeds.vue.min.js": "5CF5FC40DB715756234B234D955EF8D4B2C127779F8BFA3038141D7EBE68C1D3",
|
"simple-home-feeds.vue.min.js": "5217FE9FCE4C7434BED5FFCEE352935E572F6D950379D4FBF01E4F2AEB9BF8DD",
|
||||||
"simple-home-normal-category.vue.min.js": "354311133748055CB493D2668F8467D5E69B2607CC1F86F09EF8E7C097FAA344",
|
"simple-home-normal-category.vue.min.js": "354311133748055CB493D2668F8467D5E69B2607CC1F86F09EF8E7C097FAA344",
|
||||||
"simplify-home.min.css": "A4D6FDE358B047A88ADF6D7F16207C383439EB1A635F8AF5D8CA7E7A29A59306",
|
"simplify-home.min.css": "80191DE93D093D6F10A49145F39C14211120F2ED1C73F7CA40D63760EFFA3C73",
|
||||||
"simplify-home.min.js": "1E19F28B357C24B9B7F53ADC782DD6D4EEED6751EA879984D967C5FB4C925A9D",
|
"simplify-home.min.js": "1E19F28B357C24B9B7F53ADC782DD6D4EEED6751EA879984D967C5FB4C925A9D",
|
||||||
"simplify-home.vue.min.js": "94BA1874DBB0D5448F3DD12EB822F1AF6AB6C053D5C17F85A54A8DEE07999BF7",
|
"simplify-home.vue.min.js": "2C5AA3B459FF43C040D490AC2A121B56B118722DD6CC299A0EC033657A84F838",
|
||||||
"simplify-liveroom.min.css": "81C475E785347471D10AA6C16A5D74FDAB4BAAE25CEA93247A0B6BF258973D23",
|
"simplify-liveroom.min.css": "270C1FEFD6DDDF65959752C6092761477149E74561C9D40927EADC1657CE6515",
|
||||||
"simplify-liveroom.min.js": "5D3D3D008C7E5D79E6E08F31D0CFB183A2F90E2749AE31BE1CA75B52D63A1A6B",
|
"simplify-liveroom.min.js": "5D3D3D008C7E5D79E6E08F31D0CFB183A2F90E2749AE31BE1CA75B52D63A1A6B",
|
||||||
"skip-charge-list.min.css": "D3C988CE131CEBFAC8A60360529C83EC4AE1B9EA122F9A6924F19963E25A4FE9",
|
"skip-charge-list.min.css": "D3C988CE131CEBFAC8A60360529C83EC4AE1B9EA122F9A6924F19963E25A4FE9",
|
||||||
"skip-charge-list.min.js": "3F89374310F5F7BD66E782C629FEE09FA9E5E15076F17075E871F0E984656157",
|
"skip-charge-list.min.js": "3F89374310F5F7BD66E782C629FEE09FA9E5E15076F17075E871F0E984656157",
|
||||||
"slideshow-cards.vue.min.js": "DCA8626ECE417FCC7792D6A1CEBE3BA3BF86D2CF0E88244239B2320D54A3DAD2",
|
"slideshow-cards.vue.min.js": "A787FF3B86C074173CECF4E58630D1F20AE249F7C15B07EC22F371D0FD423B7E",
|
||||||
"slip.min.js": "407C046F6F04D990F4EFD59AB1A26FC995D8BE277CEA9E50C4621136D46D5875",
|
"slip.min.js": "407C046F6F04D990F4EFD59AB1A26FC995D8BE277CEA9E50C4621136D46D5875",
|
||||||
"subtitle-converter.min.js": "DFE6DC4471D1119B486811BB3D07336EEA90E92D90A67646D5CA2CC1CB43F833",
|
"subtitle-converter.min.js": "DFE6DC4471D1119B486811BB3D07336EEA90E92D90A67646D5CA2CC1CB43F833",
|
||||||
"superchat-translate.min.css": "F4874FE716A750AE0D21DA44393F286E5AABFFA949476E2FA06CDBE2748CF095",
|
"superchat-translate.min.css": "F4874FE716A750AE0D21DA44393F286E5AABFFA949476E2FA06CDBE2748CF095",
|
||||||
@ -259,14 +260,14 @@
|
|||||||
"touch-navbar.min.js": "A97A7E536A45DE1DF3F7CC174CF95D855FA6034FB9F7D98B818A7363BADDFE48",
|
"touch-navbar.min.js": "A97A7E536A45DE1DF3F7CC174CF95D855FA6034FB9F7D98B818A7363BADDFE48",
|
||||||
"touch-player.min.css": "63AB17E935430EDB022DF196F6FFC22AE9F29976A764D56E781FAD4D936CF320",
|
"touch-player.min.css": "63AB17E935430EDB022DF196F6FFC22AE9F29976A764D56E781FAD4D936CF320",
|
||||||
"touch-player.min.js": "FDFCB93C336C5FA9C8EE133B8F7CC697DBAD5803BBBDC3D7651802ED4E0A4FC4",
|
"touch-player.min.js": "FDFCB93C336C5FA9C8EE133B8F7CC697DBAD5803BBBDC3D7651802ED4E0A4FC4",
|
||||||
"trending-videos.min.js": "9676C06A5EB98CF9F399CEA04A17E59A31CD40DC710683EA564E82F690ABCB76",
|
"trending-videos.min.js": "48C91D2D5589C2AA7EA112A21F3DEBF012ABAD8C0654396A4039684A52703745",
|
||||||
"trending-videos.vue.min.js": "2BC48041D09F31A1CFB86EB1110CBD3894FD805882739F81C43929848E82B68B",
|
"trending-videos.vue.min.js": "6B72D00C8A04F1B32A5BA0950FBDBFE51BD1F0597DED29B012DB11058BBA8C52",
|
||||||
"tweets.min.css": "9015C1F165C91B9205ABBE4E8A3B5FA83DB1EB4B5CF2442846AF61E44FF178A8",
|
"tweets.min.css": "9015C1F165C91B9205ABBE4E8A3B5FA83DB1EB4B5CF2442846AF61E44FF178A8",
|
||||||
"unfold-feeds.min.js": "586FFB95BF24CA22E68ACE4CC4ABF25F5A2CE84C70D657D0CD62E666C4589B5B",
|
"unfold-feeds.min.js": "586FFB95BF24CA22E68ACE4CC4ABF25F5A2CE84C70D657D0CD62E666C4589B5B",
|
||||||
"url-params-clean.min.js": "AAE0C3DEE0886E0E7B0D5CB117A4103D634358F92626498C03E22F756CE137F8",
|
"url-params-clean.min.js": "AAE0C3DEE0886E0E7B0D5CB117A4103D634358F92626498C03E22F756CE137F8",
|
||||||
"v-checkbox.vue.min.js": "D630823220562A011DDF7164A8D12E775548C6B81907EB6525B3211B822590B1",
|
"v-checkbox.vue.min.js": "D630823220562A011DDF7164A8D12E775548C6B81907EB6525B3211B822590B1",
|
||||||
"v-dropdown.vue.min.js": "3D1D4DC0D8DD06C58C88A530A04DC1D5BEE6690119709B809CD3FA24C8C51C83",
|
"v-dropdown.vue.min.js": "3D1D4DC0D8DD06C58C88A530A04DC1D5BEE6690119709B809CD3FA24C8C51C83",
|
||||||
"video-card.vue.min.js": "E6BD1BA3DA663BF9A2D569570CDB320A24CA2C305F587D04B3CE60136BF7924F",
|
"video-card.vue.min.js": "D2B6151ABD2010C05A5AFE9C9B32124C0D2A263E8386043E4F585E75FF0AD4F9",
|
||||||
"video-card-info.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
"video-card-info.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
||||||
"video-danmaku.min.js": "225DDECB97C854DC57A857BB7AABE9C490D7EA464C81A4C67780E1684AC30CB1",
|
"video-danmaku.min.js": "225DDECB97C854DC57A857BB7AABE9C490D7EA464C81A4C67780E1684AC30CB1",
|
||||||
"video-dash.min.js": "B731A15492D933AF1CDFBD9EAE09D9264D2B4BCAAE3F5FD2C522ADABD6F1F44B",
|
"video-dash.min.js": "B731A15492D933AF1CDFBD9EAE09D9264D2B4BCAAE3F5FD2C522ADABD6F1F44B",
|
||||||
@ -274,7 +275,7 @@
|
|||||||
"video-info.min.js": "A81B4F409A75D818DF23C41A3F2D95E77BD0520DB6C03712F0FE30EAECDF4FBE",
|
"video-info.min.js": "A81B4F409A75D818DF23C41A3F2D95E77BD0520DB6C03712F0FE30EAECDF4FBE",
|
||||||
"video-list.vue.min.js": "D4764DC983B24BB9F5089E0D4AB5CEB89275F181A5ED75364CAEB1DFC44B2726",
|
"video-list.vue.min.js": "D4764DC983B24BB9F5089E0D4AB5CEB89275F181A5ED75364CAEB1DFC44B2726",
|
||||||
"video-speed-common.min.js": "1F8A81026E35390558C8D11EBCDC5455319D83B65EF16F54FD2AD4335E40CFD6",
|
"video-speed-common.min.js": "1F8A81026E35390558C8D11EBCDC5455319D83B65EF16F54FD2AD4335E40CFD6",
|
||||||
"video-speed-controller.min.js": "6E96628C42F92F4C32766D5268EFECF455628000084D277AAEF70F5BE37F91AE",
|
"video-speed-controller.min.js": "07DEB5145EEF3C1899CA865E2458C94BF3B4AC9CDDBE542EDD03B0E10D0535D0",
|
||||||
"video-story.min.js": "DC3811422EE8696E12408E3CA6AD2E3D7068AAC1B0E3577A40C5613BAD5C6467",
|
"video-story.min.js": "DC3811422EE8696E12408E3CA6AD2E3D7068AAC1B0E3577A40C5613BAD5C6467",
|
||||||
"view-cover.min.js": "436B4D6408F375E822BA12CE31FF82CA7ECDF565A2D74AD26FF39DDA342C2C13",
|
"view-cover.min.js": "436B4D6408F375E822BA12CE31FF82CA7ECDF565A2D74AD26FF39DDA342C2C13",
|
||||||
"volume-overdrive.min.js": "10FDFBC393D785195039FD7A66E5E5D3E62BC0E7AC142DC8074CA84A226A48EE",
|
"volume-overdrive.min.js": "10FDFBC393D785195039FD7A66E5E5D3E62BC0E7AC142DC8074CA84A226A48EE",
|
||||||
|
|||||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/comment.min.css
vendored
2
min/comment.min.css
vendored
File diff suppressed because one or more lines are too long
2
min/custom-navbar-search-box.min.js
vendored
2
min/custom-navbar-search-box.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/custom-navbar.min.css
vendored
2
min/custom-navbar.min.css
vendored
File diff suppressed because one or more lines are too long
2
min/custom-navbar.min.js
vendored
2
min/custom-navbar.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/danmaku-send-bar.min.js
vendored
2
min/danmaku-send-bar.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,t)=>{(async()=>{const{waitForControlBar:e}=await t.importAsync("live-control-bar");let n=false;let a;const l="danmaku-send-bar";e({init:()=>{t.applyStyle("danmakuSendBarStyle")},callback:async e=>{const t=dq(e,".left-area");const s=await SpinQuery.select(".chat-input-ctnr .chat-input");const r=await SpinQuery.select(".chat-input-ctnr ~ .bottom-actions .bl-button--primary");if([t,s,r].some((e=>e===null))){console.warn("[danmakuSendBar] ref elements not found",t===null,s===null,r===null);return}if(dq(e,`.${l}`)){return}if(!a){const e=Vue.extend({template:`\n<div class="${l}">\n<input\n type="text"\n placeholder="发个弹幕呗~"\n :value="value"\n @keydown.enter="send()"\n @input="updateValue($event.target.value)"\n maxlength="30"\n />\n</div>\n`,data(){return{value:s.value}},mounted(){s.addEventListener("input",this.listenChange);s.addEventListener("change",this.listenChange);if(!n){const e=Object.getOwnPropertyDescriptors(HTMLTextAreaElement.prototype).value;Object.defineProperty(s,"value",{...e,set(t){e.set.call(this,t);raiseEvent(s,"input")}});n=true}},beforeDestroy(){s.removeEventListener("input",this.listenChange);s.removeEventListener("change",this.listenChange)},methods:{updateValue(e){s.value=e;raiseEvent(s,"input")},send(){if(!r.disabled){this.value="";r.click()}},listenChange(e){this.value=e.target.value}}});a=(new e).$mount().$el}t.insertAdjacentElement("afterend",a)}})})();return{reload:()=>document.body.classList.remove("danmaku-send-bar-unloaded"),unload:()=>document.body.classList.add("danmaku-send-bar-unloaded")}})();
|
(()=>(e,t)=>{(async()=>{const{waitForControlBar:e}=await t.importAsync("live-control-bar");let n=false;let a;const l="danmaku-send-bar";e({init:()=>{t.applyStyle("danmakuSendBarStyle")},callback:async e=>{const t=dq(e,".left-area");const r=await SpinQuery.select(".control-panel-ctnr .chat-input-ctnr .chat-input");const s=await SpinQuery.select(".control-panel-ctnr .chat-input-ctnr ~ .bottom-actions .bl-button--primary");if([t,r,s].some((e=>e===null))){console.warn("[danmakuSendBar] ref elements not found",t===null,r===null,s===null);return}if(dq(e,`.${l}`)){return}if(!a){const e=Vue.extend({template:`\n<div class="${l}">\n<input\n type="text"\n placeholder="发个弹幕呗~"\n :value="value"\n @keydown.enter="send()"\n @input="updateValue($event.target.value)"\n maxlength="30"\n />\n</div>\n`,data(){return{value:r.value}},mounted(){r.addEventListener("input",this.listenChange);r.addEventListener("change",this.listenChange);if(!n){const e=Object.getOwnPropertyDescriptors(HTMLTextAreaElement.prototype).value;Object.defineProperty(r,"value",{...e,set(t){e.set.call(this,t);raiseEvent(r,"input")}});n=true}},beforeDestroy(){r.removeEventListener("input",this.listenChange);r.removeEventListener("change",this.listenChange)},methods:{updateValue(e){r.value=e;raiseEvent(r,"input")},send(){if(!s.disabled){this.value="";s.click()}},listenChange(e){this.value=e.target.value}}});a=(new e).$mount().$el}t.insertAdjacentElement("afterend",a)}})})();return{reload:()=>document.body.classList.remove("danmaku-send-bar-unloaded"),unload:()=>document.body.classList.add("danmaku-send-bar-unloaded")}})();
|
||||||
2
min/dark.min.css
vendored
2
min/dark.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/default-player-mode.min.js
vendored
2
min/default-player-mode.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,i)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const t=[{name:"常规",action:()=>{}},{name:"宽屏",action:async()=>{document.querySelector(".bilibili-player-video-btn-widescreen").click()}},{name:"网页全屏",action:()=>{document.querySelector(".bilibili-player-video-web-fullscreen").click()}},{name:"全屏",action:async()=>{const e=await SpinQuery.condition((()=>document.querySelector(".bilibili-player-video video")),(e=>e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()));if(e===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}document.querySelector(".bilibili-player-video-btn-fullscreen").click()}}];let n=()=>{};let a=()=>{};async function l(){if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await SpinQuery.any((()=>unsafeWindow.$(".bilibili-player-video-btn-setting")));if(!e){return}e.mouseover().mouseout();const i=async e=>{const i=await SpinQuery.select(".bilibili-player-video-btn-setting-right-others-content-lightoff .bui-checkbox-input");i.checked=e;raiseEvent(i,"change")};n=()=>i(true);a=()=>i(false)}}async function o(){await l();await SpinQuery.condition((()=>$(".bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area")),(e=>e.length===3&&$("video").length>0&&$("video").prop("duration")));const i=dq("video");if(!i){return}const o=t.find((i=>i.name===e.defaultPlayerMode));{const t=()=>{if(o&&$("#bilibiliPlayer[class*=mode-]").length===0){o.action()}};const l=_.get(JSON.parse(localStorage.getItem("bilibili_player_settings")),"video_status.autoplay",false);if(e.applyPlayerModeOnPlay&&!l){i.addEventListener("play",t,{once:true})}else{t()}if(l){n()}i.addEventListener("ended",a);i.addEventListener("pause",a);i.addEventListener("play",n)}}Observer.videoChange(o)})();
|
(()=>(e,t)=>{if(typeof isEmbeddedPlayer!=="undefined"&&isEmbeddedPlayer()){return}const a=[{name:"常规",action:()=>{}},{name:"宽屏",action:async()=>{const{playerAgent:e}=await t.importAsync("player-agent");await e.widescreen()}},{name:"网页全屏",action:async()=>{const{playerAgent:e}=await t.importAsync("player-agent");await e.webFullscreen()}},{name:"全屏",action:async()=>{const{playerAgent:e}=await t.importAsync("player-agent");const a=await SpinQuery.condition((()=>document.querySelector(e.query.video.element.selector)),(e=>e!==null&&e.readyState===4&&document.readyState==="complete"&&document.hasFocus()));if(a===null){console.warn("[默认播放器模式] 未能应用全屏模式, 等待超时.");return}await e.fullscreen()}}];let n=()=>{};let i=()=>{};async function r(){const{playerAgent:a}=await t.importAsync("player-agent");if(e.autoLightOff){await SpinQuery.unsafeJquery();const e=await a.query.control.buttons.settings();if(!e){return}e.mouseover().mouseout();const t=async e=>{const t=await SpinQuery.select(".bilibili-player-video-btn-setting-right-others-content-lightoff .bui-checkbox-input");t.checked=e;raiseEvent(t,"change")};n=()=>t(true);i=()=>t(false)}}async function o(){await r();const{playerReady:o}=await t.importAsync("player-ready");const{playerAgent:s}=await t.importAsync("player-agent");await o();const c=await s.query.video.element();if(!c){return}const l=a.find((t=>t.name===e.defaultPlayerMode));const y=async()=>{const e=await s.query.bilibiliPlayer();const t=e.getAttribute("data-screen");const a=!e.className.includes("mode-")&&(t===null||t==="normal");if(l&&a){l.action()}};const u=_.get(JSON.parse(localStorage.getItem("bilibili_player_settings")),"video_status.autoplay",false);if(e.applyPlayerModeOnPlay&&!u){c.addEventListener("play",y,{once:true})}else{y()}if(u){n()}c.addEventListener("ended",i);c.addEventListener("pause",i);c.addEventListener("play",n)}Observer.videoChange(o)})();
|
||||||
2
min/dpi-img.vue.min.js
vendored
2
min/dpi-img.vue.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(t,e)=>{const s=`<img :width=width :height=height :srcset=srcset :src=actualSrc :class="{placeholder: isPlaceholderActive}":style={filter}>`;return{export:Object.assign({template:s},{props:{size:[Object,Number],src:String,blur:Number,root:HTMLElement,rootMargin:String,threshold:Number,placeholderImage:Boolean},data(){return{srcset:null,actualSrc:null,isPlaceholderActive:false}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){const t=!this.src||!this.size;this.isPlaceholderActive=t&&this.placeholderImage;if(t){this.srcset=null;if(this.placeholderImage){this.actualSrc=`https://s1.hdslb.com/bfs/static/blive/live-web-center/static/img/no-cover.1ebe4d5.jpg`}else{this.actualSrc=null}return}let e=this.src;if(e.startsWith("http:")){e=e.replace("http:","https:")}if(e.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=e;this.actualSrc=e;return}this.srcset=getDpiSourceSet(e,this.size);this.actualSrc=e}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const e=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){this.calcSrc();e.disconnect()}}))}),t);e.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null},filter(){const t=[];if(this.blur){t.push(`blur(${this.blur}px)`)}return t.join(" ")}}})}})();
|
(()=>(t,e)=>{const s=`<img :width=width :height=height :srcset=srcset :src=actualSrc :class="{placeholder: isPlaceholderActive}":style={filter}>`;return{export:Object.assign({template:s},{props:{size:[Object,Number],src:String,blur:Number,root:HTMLElement,rootMargin:String,threshold:Number,placeholderImage:Boolean},data(){return{srcset:null,actualSrc:EmptyImageUrl,isPlaceholderActive:false}},watch:{size(){this.sourceChange()},src(){this.sourceChange()}},methods:{sourceChange(){if(this.actualSrc===null||this.srcset===null){return}this.calcSrc()},calcSrc(){const t=!this.src||!this.size;this.isPlaceholderActive=t&&this.placeholderImage;if(t){this.srcset=null;if(this.placeholderImage){this.actualSrc=`https://s1.hdslb.com/bfs/static/blive/live-web-center/static/img/no-cover.1ebe4d5.jpg`}else{this.actualSrc=EmptyImageUrl}return}let e=this.src;if(e.startsWith("http:")){e=e.replace("http:","https:")}if(e.includes("//static.hdslb.com/images/member/noface.gif")){this.srcset=e;this.actualSrc=e;return}this.srcset=getDpiSourceSet(e,this.size);this.actualSrc=e}},mounted(){const t={root:this.root,rootMargin:this.rootMargin||"200px",threshold:this.threshold};const e=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){this.calcSrc();e.disconnect()}}))}),t);e.observe(this.$el)},computed:{width(){if(typeof this.size==="object"&&"width"in this.size){return this.size.width}return null},height(){if(typeof this.size==="object"&&"height"in this.size){return this.size.height}return null},filter(){const t=[];if(this.blur){t.push(`blur(${this.blur}px)`)}return t.join(" ")}}})}})();
|
||||||
2
min/gui-settings.min.css
vendored
2
min/gui-settings.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/gui-settings.min.js
vendored
2
min/gui-settings.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/hide-banner.min.css
vendored
2
min/hide-banner.min.css
vendored
@ -1 +1 @@
|
|||||||
#banner_link,.custom-navbar .blur-layer,.z-top-container.has-banner>.header{display:none!important}.b-header-mask-wrp .b-header-mask-bg,div.blur-bg{opacity:0!important}.international-header .bili-banner,.international-home .bili-banner{visibility:hidden!important;height:50px!important;min-height:unset!important}
|
#banner_link,.bili-header__banner,.custom-navbar .blur-layer,.z-top-container.has-banner>.header{display:none!important}.b-header-mask-wrp .b-header-mask-bg,div.blur-bg{opacity:0!important}.international-header .bili-banner,.international-home .bili-banner{visibility:hidden!important;height:50px!important;min-height:unset!important}
|
||||||
2
min/home-hidden.min.js
vendored
2
min/home-hidden.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,n)=>{const i=()=>{if(document.URL==="https://www.bilibili.com/"){return!e.simplifyHome}return document.URL.includes("https://www.bilibili.com/")};const t=[{name:"categories",displayName:"分区栏",style:`\n .bili-header-m>.bili-wrapper {\n visibility: hidden !important;\n height: 18px !important;\n }\n .primary-menu-itnl {\n visibility: hidden !important;\n height: 24px !important;\n padding: 0 !important;\n }\n`},{name:"trends",displayName:"活动/热门视频",style:`\n .first-screen #reportFirst1 { display: none !important; }\n .first-screen .space-between {\n margin-bottom: 0 !important;\n }\n .rcmd-box-wrap { display: none !important; }\n`},{name:"online",displayName:"在线列表",style:`\n .first-screen #reportFirst2 { display: none !important; }\n`},{name:"ext-box",displayName:"电竞赛事",style:`\n .first-screen #reportFirst3 { display: none !important; } `},{name:"special",displayName:"特别推荐",style:`\n #bili_report_spe_rec { display: none !important; }\n`},{name:"contact",displayName:"联系方式",style:`\n .international-footer { display: none !important; }\n`},{name:"elevator",displayName:"右侧分区导航",style:`\n .storey-box .elevator { display: none !important; }\n`}];const s=i=>{if(!e.homeHiddenItems.includes(i.name)){if(i.style){var t;(t=dq(`#home-hidden-style-${i.name}`))===null||t===void 0?void 0:t.remove()}else{document.body.classList.remove(`home-hidden-${i.name}`)}}else{if(i.style){n.applyImportantStyleFromText(i.style,`home-hidden-style-${i.name}`)}else{document.body.classList.add(`home-hidden-${i.name}`)}}};(async()=>{if(!i()){return}const e=(await SpinQuery.condition((()=>dqa(".proxy-box > div")),(e=>e.length>0||document.URL!=="https://www.bilibili.com/"))).map((e=>{var n,i,t;return{name:e.id.replace(/^bili_/,""),displayName:(n=(i=e.querySelector("header .name"))===null||i===void 0?void 0:(t=i.textContent)===null||t===void 0?void 0:t.trim())!==null&&n!==void 0?n:"未知分区"}}));t.push(...e);t.forEach(s);const o=e.map((({name:e})=>`\nbody.home-hidden-${e} .storey-box .proxy-box #bili_${e} {\n display: none !important;\n}\n`.trim())).join("\n");const d=n.import("homeHiddenStyle");n.applyImportantStyleFromText(o+d,"home-hidden-style")})();return{widget:{condition:i,content:`\n<div class="gui-settings-flat-button" style="position: relative" id="home-hidden">\n<i class="mdi mdi-24px mdi-settings"></i>\n<span>首页过滤</span>\n<div class="home-hidden-settings popup">\n<div v-for="item in items" @click="toggle(item)" :key="item.name" class="home-hidden-settings-item" :class="{ 'home-hidden': hiddenItems.includes(item.name) }">\n<i class="mdi mdi-18px mdi-eye"></i>\n<i class="mdi mdi-18px mdi-eye-off"></i>\n {{ item.displayName }}\n</div>\n</div>\n</div>\n`,success:async()=>{const n=dq("#home-hidden");new Vue({el:dq(n,".popup"),data(){return{items:t,hiddenItems:[...e.homeHiddenItems]}},watch:{hiddenItems(n){e.homeHiddenItems=[...n]}},mounted(){const e=this.$el;n.addEventListener("click",(n=>{if(n.target===e||e.contains(n.target)){return}e.classList.toggle("opened")}))},methods:{async toggle(e){const n=this.hiddenItems;const i=n.indexOf(e.name);if(i!==-1){n.splice(i,1)}else{n.push(e.name)}await this.$nextTick();s(e)}}})}}}})();
|
(()=>(e,n)=>{const i=()=>{if(document.URL==="https://www.bilibili.com/"){return!e.simplifyHome}return document.URL.includes("https://www.bilibili.com/")};const t=[{name:"categories",displayName:"分区栏",style:`\n .bili-header-m>.bili-wrapper {\n visibility: hidden !important;\n height: 18px !important;\n }\n .primary-menu-itnl {\n visibility: hidden !important;\n height: 24px !important;\n padding: 0 !important;\n }\n .bili-header__channel {\n height: 12px !important;\n }\n .bili-header__channel > * {\n display: none !important;\n }\n`},{name:"trends",displayName:"活动/热门视频",style:`\n .first-screen #reportFirst1 { display: none !important; }\n .first-screen .space-between {\n margin-bottom: 0 !important;\n }\n .bili-layout .bili-grid:first-child,\n .rcmd-box-wrap {\n display: none !important;\n }\n`},{name:"online",displayName:"在线列表(旧版)",style:`\n .first-screen #reportFirst2 { display: none !important; }\n`},{name:"ext-box",displayName:"赛事(旧版)",style:`\n .first-screen #reportFirst3 { display: none !important; } `},{name:"special",displayName:"特别推荐(旧版)",style:`\n #bili_report_spe_rec { display: none !important; }\n`},{name:"contact",displayName:"联系方式",style:`\n .bili-footer .b-footer-wrap,\n .international-footer {\n display: none !important;\n }\n`},{name:"elevator",displayName:"右侧分区导航(旧版)",style:`\n .storey-box .elevator { display: none !important; }\n`}];const o=i=>{if(!e.homeHiddenItems.includes(i.name)){if(i.style){var t;(t=dq(`#home-hidden-style-${i.name}`))===null||t===void 0?void 0:t.remove()}else{document.body.classList.remove(`home-hidden-${i.name}`)}}else{if(i.style){n.applyImportantStyleFromText(i.style,`home-hidden-style-${i.name}`)}else{document.body.classList.add(`home-hidden-${i.name}`)}}};(async()=>{if(!i()){return}const e=(async()=>{const e=getCookieValue("i-wanna-go-back")==="-1";const n=document.URL!=="https://www.bilibili.com/";if(!e){var i;const e=await SpinQuery.condition((()=>dqa(".proxy-box > div")),(e=>e.length>0||n));return(i=e===null||e===void 0?void 0:e.map((e=>{var n,i,t;return{name:e.id.replace(/^bili_/,""),displayName:(n=(i=e.querySelector("header .name"))===null||i===void 0?void 0:(t=i.textContent)===null||t===void 0?void 0:t.trim())!==null&&n!==void 0?n:"未知分区"}})))!==null&&i!==void 0?i:[]}else{var t;const e=["推广"];const i=await SpinQuery.condition((()=>dqa(".bili-grid .the-world")),(e=>e.length>3||n));console.log(i);const o=e=>{let n=e;while(n.parentElement){if(n.classList.contains("bili-grid")){return n}n=n.parentElement}return null};return(t=i===null||i===void 0?void 0:i.filter((n=>!e.includes(n.id))).map((e=>{const n=o(e);const i=e.id;if(n){n.dataset.area=i;return{name:i,displayName:i}}return null})).filter((e=>e!==null)))!==null&&t!==void 0?t:[]}})();const a=await e;t.push(...a);t.forEach(o);const s=a.map((({name:e})=>`\nbody.home-hidden-${e} .bili-layout .bili-grid[data-area="${e}"],\nbody.home-hidden-${e} .storey-box .proxy-box #bili_${e} {\n display: none !important;\n}\n`.trim())).join("\n");const d=n.import("homeHiddenStyle");n.applyImportantStyleFromText(s+d,"home-hidden-style")})();return{widget:{condition:i,content:`\n<div class="gui-settings-flat-button" style="position: relative" id="home-hidden">\n<i class="mdi mdi-24px mdi-settings"></i>\n<span>首页过滤</span>\n<div class="home-hidden-settings popup">\n<div v-for="item in items" @click="toggle(item)" :key="item.name" class="home-hidden-settings-item" :class="{ 'home-hidden': hiddenItems.includes(item.name) }">\n<i class="mdi mdi-18px mdi-eye"></i>\n<i class="mdi mdi-18px mdi-eye-off"></i>\n {{ item.displayName }}\n</div>\n</div>\n</div>\n`,success:async()=>{const n=dq("#home-hidden");new Vue({el:dq(n,".popup"),data(){return{items:t,hiddenItems:[...e.homeHiddenItems]}},watch:{hiddenItems(n){e.homeHiddenItems=[...n]}},mounted(){const e=this.$el;n.addEventListener("click",(n=>{if(n.target===e||e.contains(n.target)){return}e.classList.toggle("opened")}))},methods:{async toggle(e){const n=this.hiddenItems;const i=n.indexOf(e.name);if(i!==-1){n.splice(i,1)}else{n.push(e.name)}await this.$nextTick();o(e)}}})}}}})();
|
||||||
2
min/i18n.min.css
vendored
2
min/i18n.min.css
vendored
File diff suppressed because one or more lines are too long
2
min/keymap.min.css
vendored
2
min/keymap.min.css
vendored
@ -1 +1 @@
|
|||||||
.keymap-tip-container{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:8px 16px;background-color:#000a;color:#fff;pointer-events:none;opacity:0;z-index:100;display:flex;align-items:center;font-size:14pt;border-radius:4px;transition:.2s ease-out}.keymap-tip-container.show{opacity:1}.keymap-tip-container i{line-height:1;margin-right:8px;font-size:18pt}.bilibili-player .bilibili-player-area .bilibili-player-video-wrap .bilibili-player-volumeHint{background-color:#000a;color:#fff}.bilibili-player .bilibili-player-area .bilibili-player-video-wrap .bilibili-player-volumeHint-icon{line-height:1}
|
.keymap-tip-container{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:8px 16px;background-color:#000a;color:#fff;pointer-events:none;opacity:0;z-index:150;display:flex;align-items:center;font-size:14pt;border-radius:4px;transition:.2s ease-out}.keymap-tip-container.show{opacity:1}.keymap-tip-container i{line-height:1;margin-right:8px;font-size:18pt}.bilibili-player .bilibili-player-area .bilibili-player-video-wrap .bilibili-player-volumeHint{background-color:#000a;color:#fff}.bilibili-player .bilibili-player-area .bilibili-player-video-wrap .bilibili-player-volumeHint-icon{line-height:1}
|
||||||
2
min/keymap.min.js
vendored
2
min/keymap.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/notify-new-version.min.js
vendored
2
min/notify-new-version.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map((e=>parseInt(e)));this.versionString=e}compareTo(e){for(let t=0;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}let r;async function i(){if(typeof offlineData!=="undefined"||isIframe()){return false}if(e.lastNewVersionCheck!==undefined){const t=Number(new Date);const n=t-e.lastNewVersionCheck;if(n<e.newVersionCheckInterval){return false}}try{const t=GM.info.script.name.match(/Bilibili Evolved \((.*)\)/);const n=t?"."+t[1].replace(/ /g,"-").toLowerCase():"";const i=n===".preview";r=`https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@${i?"preview":"master"}/bilibili-evolved${n}.user.js`;let a;try{const e=await Ajax.monkey({url:r});a=e.match(/@version[ ]*([\d\.]+)/)[1]}catch(e){a=await Ajax.monkey({url:Resource.cdnRoot||Resource.root+"version.txt"})}const o=new s(a);const l=new s(e.currentVersion);const c=o.greaterThan(l);if(c){const e=`新版本<span>${o.versionString}</span>已发布. <a id="new-version-link" class="link" href="${r}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;const t=Toast.info(e,"检查更新");SpinQuery.select("#new-version-link").then((e=>e.addEventListener("click",(()=>{t&&t.dismiss()}))))}return c}catch(e){return false}finally{e.lastNewVersionCheck=Number(new Date)}}const a=i();return{widget:{content:`\n<button class="gui-settings-flat-button" id="new-version-update">\n<a href="${r}" style="display:none"></a>\n<i class="icon-update"></i>\n<span>安装更新</span>\n</button>\n<button class="gui-settings-flat-button" id="new-version-info">\n<a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n<i class="icon-info"></i>\n<span>查看更新</span>\n</button>\n`,condition:()=>a,success:()=>{document.querySelector("#new-version-update").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}}));document.querySelector("#new-version-info").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}}))}}}})();
|
(()=>(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map((e=>parseInt(e)));this.versionString=e}compareTo(e){for(let t=0;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}let i;async function r(){if(typeof offlineData!=="undefined"||isIframe()){return false}if(e.lastNewVersionCheck!==undefined){const t=Number(new Date);const n=t-e.lastNewVersionCheck;if(n<e.newVersionCheckInterval){return false}}try{const t=GM.info.script.name.match(/Bilibili Evolved \((.*)\)/);const n=t?"."+t[1].replace(/ /g,"-").toLowerCase():"";const r=n===".preview";i=`https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@${r?"preview":"master"}/bilibili-evolved${n}.user.js`;let a;try{const e=await Ajax.monkey({url:i});a=e.match(/@version[ ]*([\d\.]+)/)[1]}catch(e){a=await Ajax.monkey({url:Resource.cdnRoot||Resource.root+"version.txt"})}const o=new s(a);if(o.parts[0]>=2&&!e.noNotifyV2){const t=`新版本<span>${o.versionString}</span>已发布, 请前往项目的<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">更新日志</a>或者<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/discussions">讨论区</a>了解如何安装和使用. <a class="link" href="javascript:void(0)" id="no-notify-v2">不再提示</a>`;const n=Toast.info(t,"检查更新");SpinQuery.select("#no-notify-v2").then((t=>t.addEventListener("click",(()=>{e.noNotifyV2=true;n&&n.dismiss()}))));return false}const l=new s(e.currentVersion);const c=o.greaterThan(l);if(c){const e=`新版本<span>${o.versionString}</span>已发布. <a id="new-version-link" class="link" href="${i}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;const t=Toast.info(e,"检查更新");SpinQuery.select("#new-version-link").then((e=>e.addEventListener("click",(()=>{t&&t.dismiss()}))))}return c}catch(e){return false}finally{e.lastNewVersionCheck=Number(new Date)}}const a=r();return{widget:{content:`\n<button class="gui-settings-flat-button" id="new-version-update">\n<a href="${i}" style="display:none"></a>\n<i class="icon-update"></i>\n<span>安装更新</span>\n</button>\n<button class="gui-settings-flat-button" id="new-version-info">\n<a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n<i class="icon-info"></i>\n<span>查看更新</span>\n</button>\n`,condition:()=>a,success:()=>{document.querySelector("#new-version-update").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}}));document.querySelector("#new-version-info").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}}))}}}})();
|
||||||
2
min/online-info-row.vue.min.js
vendored
2
min/online-info-row.vue.min.js
vendored
File diff suppressed because one or more lines are too long
1
min/player-agent.min.js
vendored
Normal file
1
min/player-agent.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
min/rank-list.vue.min.js
vendored
2
min/rank-list.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/remove-promotions.min.css
vendored
2
min/remove-promotions.min.css
vendored
@ -1 +1 @@
|
|||||||
#home_popularize .adpos,#home_popularize .l-con,#reportFirst2 .extension,#slide_ad,.ad-report,.bili-header-m .nav-menu .nav-con .nav-item .text-red,.bilibili-player-promote-wrap,.bypb-window .operate-card,.gg-floor-module,.gg-window .operate-card,.home-app-download,.home-content .ad-panel,.international-home .banner-card,.mascot,.mobile-link-l,.rank-container .cm-module,.recommend-list .rec-list>:not(.video-page-card),.v-wrap .vcd,.video-page-game-card,.video-page-special-card,body.remove-game-match-module #reportFirst3,body.remove-game-match-module .bili-wrapper>.home-match,body:not(.preserve-event-banner) .activity-m{display:none!important}.recommend-list .rec-list>:not(.video-page-card)+.video-page-card{padding-top:0!important}#home_popularize{position:relative!important}.gg-window .online,.popularize-module .online{position:absolute!important;top:50%!important;right:.5%!important;transform:translateY(-100%)!important}.gg-window .online{right:0!important;padding:0 16px!important}#reportFirst2{position:relative;margin-bottom:4px}.blocked{width:440px;height:220px;display:flex;color:#888;background-color:#8882;font-size:24pt;font-weight:700;align-items:center;justify-content:space-evenly}.blocked.new{width:100%;height:100%;background-color:#eee}body.dark .blocked.new{background-color:#333}body.compact .blocked{width:480px;height:240px}
|
#home_popularize .adpos,#home_popularize .l-con,#reportFirst2 .extension,#slide_ad,.ad-report,.bili-header-m .nav-menu .nav-con .nav-item .text-red,.bilibili-player-promote-wrap,.bypb-window .operate-card,.eva-banner,.eva-extension-area,.gg-floor-module,.gg-window .operate-card,.home-app-download,.home-content .ad-panel,.international-home .banner-card,.mascot,.mobile-link-l,.rank-container .cm-module,.recommend-list .rec-list>:not(.video-page-card),.v-wrap .vcd,.video-page-game-card,.video-page-special-card,body.remove-game-match-module #reportFirst3,body.remove-game-match-module .bili-wrapper>.home-match,body:not(.preserve-event-banner) .activity-m{display:none!important}.recommend-list .rec-list>:not(.video-page-card)+.video-page-card{padding-top:0!important}#home_popularize{position:relative!important}.gg-window .online,.popularize-module .online{position:absolute!important;top:50%!important;right:.5%!important;transform:translateY(-100%)!important}.gg-window .online{right:0!important;padding:0 16px!important}#reportFirst2{position:relative;margin-bottom:4px}.blocked{width:440px;height:220px;display:flex;color:#888;background-color:#8882;font-size:24pt;font-weight:700;align-items:center;justify-content:space-evenly}.blocked.new{width:100%;height:100%;background-color:#eee}body.dark .blocked.new{background-color:#333}body.compact .blocked{width:480px;height:240px}
|
||||||
2
min/remove-promotions.min.js
vendored
2
min/remove-promotions.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,n)=>{if(document.URL.replace(window.location.search,"")==="https://www.bilibili.com/"){SpinQuery.any((()=>dqa(".gg-pic")),(n=>{n.forEach((n=>{const t=n.parentElement;t.style.display="none";const l=[...t.parentElement.childNodes].indexOf(t)+1;const i=t.parentElement.parentElement.querySelector(`.pic li:nth-child(${l})`);if(i){i.style.display="flex";const n=i.querySelector("a:not(.more-text)");n.insertAdjacentHTML("afterend",`\n<div class="blocked">${e.showBlockedAdsTip?"🚫已屏蔽广告":""}</div>\n`);n.style.visibility="hidden";i.querySelector("a.more-text").style.display="none";i.querySelector("img").style.display="none"}}))}));SpinQuery.select(".focus-carousel.home-slide").then((n=>{if(!n){return}[...n.querySelectorAll(".gg-icon,.bypb-icon")].map((e=>e.parentElement.parentElement)).forEach((n=>{n.style.display="none";n.insertAdjacentHTML("afterend",`\n<div class="blocked new">${e.showBlockedAdsTip?"🚫已屏蔽广告":""}</div>\n`)}))}))}addSettingsListener("preserveEventBanner",(e=>{document.body.classList.toggle("preserve-event-banner",e)}),true)})();
|
(()=>(e,n)=>{if(document.URL.replace(window.location.search,"")==="https://www.bilibili.com/"){SpinQuery.select(".eva-extension-area").then((e=>{e.parentElement.style.margin="12px"}));SpinQuery.any((()=>dqa(".gg-pic")),(n=>{n.forEach((n=>{const t=n.parentElement;t.style.display="none";const l=[...t.parentElement.childNodes].indexOf(t)+1;const i=t.parentElement.parentElement.querySelector(`.pic li:nth-child(${l})`);if(i){i.style.display="flex";const n=i.querySelector("a:not(.more-text)");n.insertAdjacentHTML("afterend",`\n<div class="blocked">${e.showBlockedAdsTip?"🚫已屏蔽广告":""}</div>\n`);n.style.visibility="hidden";i.querySelector("a.more-text").style.display="none";i.querySelector("img").style.display="none"}}))}));SpinQuery.select(".focus-carousel.home-slide").then((n=>{if(!n){return}[...n.querySelectorAll(".gg-icon,.bypb-icon")].map((e=>e.parentElement.parentElement)).forEach((n=>{n.style.display="none";n.insertAdjacentHTML("afterend",`\n<div class="blocked new">${e.showBlockedAdsTip?"🚫已屏蔽广告":""}</div>\n`)}))}))}addSettingsListener("preserveEventBanner",(e=>{document.body.classList.toggle("preserve-event-banner",e)}),true)})();
|
||||||
2
min/settings-tooltip.zh-CN.min.js
vendored
2
min/settings-tooltip.zh-CN.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/show-cover-before-play.min.js
vendored
2
min/show-cover-before-play.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,o)=>{const t={include:["//www.bilibili.com/video/","//www.bilibili.com/bangumi/"]};const n="showCoverBeforePlayStyle";let r;const i=()=>{if(t.include.every((e=>!document.URL.includes(e)))){return}o.applyStyle(n);const e=()=>document.body.style.removeProperty("--cover-url");const i=HTMLVideoElement.prototype.play;HTMLVideoElement.prototype.play=function(...o){e();return i.call(this,...o)};const l=async()=>{const e=await SpinQuery.select((()=>unsafeWindow.aid));if(!e){console.warn("[播放前显示封面] 未找到av号");return}const{cid:t}=unsafeWindow;if(t===r||!t){return}r=t;const{VideoInfo:n}=await o.importAsync("video-info");const i=new n(e);await i.fetchInfo();document.body.style.setProperty("--cover-url",`url('${i.coverUrl}')`)};Observer.videoChange(l)};i();return{reload:()=>o.applyStyle(n),unload:()=>o.removeStyle(n)}})();
|
(()=>(e,o)=>{const n={include:["//www.bilibili.com/video/","//www.bilibili.com/bangumi/"]};const t="showCoverBeforePlayStyle";let i;const r=()=>{if(n.include.every((e=>!document.URL.includes(e)))){return}o.applyStyle(t);const e=()=>document.body.style.removeProperty("--cover-url");const r=unsafeWindow.__ENABLE_WASM_PLAYER__||dq("bwp-video");const c=r?BwpElement.prototype:HTMLVideoElement.prototype;const l=c.play;c.play=function(...o){e();return l.call(this,...o)};const s=async()=>{const e=await SpinQuery.select((()=>unsafeWindow.aid));if(!e){console.warn("[播放前显示封面] 未找到av号");return}const{cid:n}=unsafeWindow;if(n===i||!n){return}i=n;const{VideoInfo:t}=await o.importAsync("video-info");const r=new t(e);await r.fetchInfo();document.body.style.setProperty("--cover-url",`url('${r.coverUrl}')`)};Observer.videoChange(s)};r();return{reload:()=>o.applyStyle(t),unload:()=>o.removeStyle(t)}})();
|
||||||
2
min/simple-home-categories.vue.min.js
vendored
2
min/simple-home-categories.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/simple-home-feeds.vue.min.js
vendored
2
min/simple-home-feeds.vue.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,t)=>{const a=`<div class=feeds><div class=header><div class=tabs><div class=title>动态</div><div class=tab v-for="tab in tabs":key=tab.type @click=changeTab(tab) :class="{active: currentTab === tab}"><div class=tab-name>{{tab.name}}</div></div></div><div class=grow></div><a class=online target=_blank href=https://www.bilibili.com/video/online.html>在线列表</a><div class=grow></div><div class=page><div class=prev-page @click=scroll(-1)><icon type=extended icon=left-arrow></icon></div><div class=next-page @click=scroll(1)><icon type=extended icon=right-arrow></icon></div></div><a class=more href=//t.bilibili.com/ target=_blank><icon type=home icon=activity></icon>全部动态</a></div><div class=contents ref=contents><div class=card-wrapper v-for="card in feedCards":key=card.id><video-card :data=card orientation=vertical></video-card></div><div class=empty v-if="feedCards.length === 0">没有动态哦(´・_・\`)</div></div></div>`;t.applyStyleFromText(`.simple-home.snap .feeds .contents{scroll-snap-type:x mandatory}.simple-home .feeds{justify-self:start;display:flex;flex-direction:column}.simple-home .feeds .header,.simple-home .feeds .sub-header{grid-area:unset;margin-bottom:16px;padding:0 8px}.simple-home .feeds .header .page,.simple-home .feeds .sub-header .page{margin-right:8px;display:flex;align-items:center}.simple-home .feeds .header .page>*,.simple-home .feeds .sub-header .page>*{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#8882;border-radius:50%;margin-left:8px;cursor:pointer}.simple-home .feeds .header .page>:hover,.simple-home .feeds .sub-header .page>:hover{background-color:#8884}.simple-home .feeds .header .page .prev-page .be-icon,.simple-home .feeds .sub-header .page .prev-page .be-icon{transform:translateX(-1px)}.simple-home .feeds .header .page .next-page .be-icon,.simple-home .feeds .sub-header .page .next-page .be-icon{transform:translateX(1px)}.simple-home .feeds .header .tab:nth-child(2),.simple-home .feeds .sub-header .tab:nth-child(2){margin-left:32px}.simple-home .feeds .header .grow,.simple-home .feeds .sub-header .grow{flex-grow:1}.simple-home .feeds .header .online,.simple-home .feeds .sub-header .online{padding:8px 16px;height:32px;border-radius:16px;background-color:#8882;color:inherit;font-size:12px;display:flex;align-items:center;box-sizing:border-box}.simple-home .feeds .contents{display:flex;overflow:auto;--card-width:200px;--card-height:250px;--card-count:4;width:calc((var(--card-width) + 16px) * var(--card-count));padding-bottom:16px;scrollbar-width:none!important;min-height:calc(var(--card-height) + 16px)}@media screen and (max-width:900px){.simple-home .feeds .contents{--card-count:3}}@media screen and (min-width:1100px){.simple-home .feeds .contents{--card-count:3}}@media screen and (min-width:1300px){.simple-home .feeds .contents{--card-count:4}}@media screen and (min-width:1550px){.simple-home .feeds .contents{--card-count:5}}@media screen and (min-width:1850px){.simple-home .feeds .contents{--card-count:6}}.simple-home .feeds .contents::-webkit-scrollbar{width:0!important;height:0!important}.simple-home .feeds .contents .card-wrapper{padding:0 8px;scroll-snap-align:start;flex-shrink:0}.simple-home .feeds .contents .empty{display:flex;align-items:center;justify-content:center;width:100%;font-size:16px}`,"simple-home-feeds-style");const s=[{name:"视频",type:"video",url:"https://t.bilibili.com/?tab=8"},{name:"番剧",type:"bangumi",url:"https://t.bilibili.com/?tab=512"}];return{export:Object.assign({template:a},{components:{VideoCard:()=>t.importAsync("video-card.vue"),Icon:()=>t.importAsync("icon.vue")},data(){return{online:"--",tabs:s,currentTab:s[0],feedCards:[]}},watch:{currentTab(e){this.updateFeedCards(e)}},methods:{async updateFeedCards(e){const{getVideoFeeds:a}=await t.importAsync("feeds-apis");this.feedCards=await a(e.type)},changeTab(e){if(this.currentTab===e){open(e.url,"_blank")}else{this.currentTab=e}},scroll(e){const t=this.$refs.contents;const a=getComputedStyle(t);const s=parseFloat(a.getPropertyValue("--card-count"));const i=parseFloat(a.getPropertyValue("--card-width"));const d=16;const n=s*(i+d);t.scrollBy(e*n,0)}},async mounted(){this.updateFeedCards(this.currentTab);let e;addSettingsListener("simpleHomeWheelScroll",(async a=>{if(a){const a=this.$refs.contents;const{enableHorizontalScroll:s}=await t.importAsync("horizontal-scroll");e=s(a)}else{e&&e()}}),true)}})}})();
|
(()=>(e,t)=>{const s=`<div class=feeds><div class=header><div class=tabs><div class=title>动态</div><div class=tab v-for="tab in tabs":key=tab.type @click=changeTab(tab) :class="{active: currentTab === tab}"><div class=tab-name>{{tab.name}}</div></div></div><div class=grow></div><a class=online target=_blank href=https://www.bilibili.com/video/online.html>在线列表</a><div class=grow></div><div class=page><div class=prev-page @click=scroll(-1)><icon type=extended icon=left-arrow></icon></div><div class=next-page @click=scroll(1)><icon type=extended icon=right-arrow></icon></div></div><a class=more href=//t.bilibili.com/ target=_blank><icon type=home icon=activity></icon>全部动态</a></div><div class="contents edge-gradient"ref=contents @scroll=checkScrollPosition :class="{ 'is-bottom': isBottom }"><div class=card-wrapper v-for="card in feedCards":key=card.id><video-card :data=card orientation=vertical></video-card></div><div class=empty v-if="feedCards.length === 0">没有动态哦(´・_・\`)</div></div></div>`;t.applyStyleFromText(`.simple-home.snap .feeds .contents{scroll-snap-type:x mandatory}.simple-home .feeds{justify-self:start;display:flex;flex-direction:column}.simple-home .feeds .header,.simple-home .feeds .sub-header{grid-area:unset;margin-bottom:16px;padding:0 8px}.simple-home .feeds .header .page,.simple-home .feeds .sub-header .page{margin-right:8px;display:flex;align-items:center}.simple-home .feeds .header .page>*,.simple-home .feeds .sub-header .page>*{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#8882;border-radius:50%;margin-left:8px;cursor:pointer}.simple-home .feeds .header .page>:hover,.simple-home .feeds .sub-header .page>:hover{background-color:#8884}.simple-home .feeds .header .page .prev-page .be-icon,.simple-home .feeds .sub-header .page .prev-page .be-icon{transform:translateX(-1px)}.simple-home .feeds .header .page .next-page .be-icon,.simple-home .feeds .sub-header .page .next-page .be-icon{transform:translateX(1px)}.simple-home .feeds .header .tab:nth-child(2),.simple-home .feeds .sub-header .tab:nth-child(2){margin-left:32px}.simple-home .feeds .header .grow,.simple-home .feeds .sub-header .grow{flex-grow:1}.simple-home .feeds .header .online,.simple-home .feeds .sub-header .online{padding:8px 16px;height:32px;border-radius:16px;background-color:#8882;color:inherit;font-size:12px;display:flex;align-items:center;box-sizing:border-box}.simple-home .feeds .contents{display:flex;overflow:auto;--card-width:200px;--card-height:250px;--card-count:4;width:calc((var(--card-width) + 16px) * var(--card-count));scrollbar-width:none!important;min-height:calc(var(--card-height) + 16px)}@media screen and (max-width:900px){.simple-home .feeds .contents{--card-count:3}}@media screen and (min-width:1100px){.simple-home .feeds .contents{--card-count:3}}@media screen and (min-width:1300px){.simple-home .feeds .contents{--card-count:4}}@media screen and (min-width:1550px){.simple-home .feeds .contents{--card-count:5}}@media screen and (min-width:1850px){.simple-home .feeds .contents{--card-count:6}}.simple-home .feeds .contents::-webkit-scrollbar{width:0!important;height:0!important}.simple-home .feeds .contents .card-wrapper{padding:0 8px;scroll-snap-align:start;flex-shrink:0}.simple-home .feeds .contents .empty{display:flex;align-items:center;justify-content:center;width:100%;font-size:16px}`,"simple-home-feeds-style");const i=[{name:"视频",type:"video",url:"https://t.bilibili.com/?tab=8"},{name:"番剧",type:"bangumi",url:"https://t.bilibili.com/?tab=512"}];return{export:Object.assign({template:s},{components:{VideoCard:()=>t.importAsync("video-card.vue"),Icon:()=>t.importAsync("icon.vue")},data(){return{online:"--",isBottom:false,tabs:i,currentTab:i[0],feedCards:[]}},watch:{currentTab(e){this.updateFeedCards(e)}},methods:{async updateFeedCards(e){const{getVideoFeeds:s}=await t.importAsync("feeds-apis");this.feedCards=await s(e.type)},changeTab(e){if(this.currentTab===e){open(e.url,"_blank")}else{this.currentTab=e}},scroll(e){const t=this.$refs.contents;const s=getComputedStyle(t);const i=parseFloat(s.getPropertyValue("--card-count"));const a=parseFloat(s.getPropertyValue("--card-width"));const o=16;const d=i*(a+o);t.scrollBy(e*d,0)},checkScrollPosition:_.debounce((function e(t){const s=t.target;this.isBottom=s.scrollWidth-s.scrollLeft===s.clientWidth}),200)},async mounted(){this.updateFeedCards(this.currentTab);let e;addSettingsListener("simpleHomeWheelScroll",(async s=>{if(s){const s=this.$refs.contents;const{enableHorizontalScroll:i}=await t.importAsync("horizontal-scroll");e=i(s)}else{e&&e()}}),true)}})}})();
|
||||||
2
min/simple-home.vue.min.js
vendored
2
min/simple-home.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/simplify-home.min.css
vendored
2
min/simplify-home.min.css
vendored
@ -1 +1 @@
|
|||||||
#app>.bili-header-m.stardust-common>.bili-wrapper,#app>.bili-wrapper,#app>.elevator-module,.bili-header-m .head-banner .head-content .head-logo,.international-footer,.international-header .b-wrap,.international-home>:not(.international-header){position:fixed;visibility:hidden;top:100vh;left:0;height:0!important;padding:0!important;margin:0!important}
|
#app>.bili-header-m.stardust-common>.bili-wrapper,#app>.bili-wrapper,#app>.elevator-module,#i_cecream .bili-header__channel,#i_cecream>:not(.bili-header),.bili-header-m .head-banner .head-content .head-logo,.international-footer,.international-header .b-wrap,.international-home>:not(.international-header){position:fixed;visibility:hidden;top:100vh;left:0;height:0!important;padding:0!important;margin:0!important}
|
||||||
2
min/simplify-home.vue.min.js
vendored
2
min/simplify-home.vue.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,o)=>{const m=`<div class=simplify-home><component class=simplify-home-component :is=activeComponent></component></div>`;o.applyStyleFromText(`.simplify-home{padding-top:32px;display:flex;align-items:flex-start;justify-content:center;min-height:100vh;background-color:#f4f4f4;font-size:12px}body.dark .simplify-home{background-color:#181818}.simplify-home .simplify-home-component{max-width:100%}html{scroll-behavior:smooth}`,"simplify-home-style");return{export:Object.assign({template:m},{components:{"minimal-home":()=>o.importAsync("minimal-home.vue"),"simple-home":()=>o.importAsync("simple-home.vue")},computed:{activeComponent(){return this.homeStyle==="清爽"?"simple-home":"minimal-home"}},props:{homeStyle:String}})}})();
|
(()=>(m,e)=>{const o=`<div class=simplify-home><component class=simplify-home-component :is=activeComponent></component></div>`;e.applyStyleFromText(`.simplify-home{padding:32px 72px 0;display:flex;align-items:flex-start;justify-content:center;min-height:100vh;--simplify-home-background:#f4f4f4;background-color:var(--simplify-home-background);font-size:12px}body.dark .simplify-home{--simplify-home-background:#181818}.simplify-home .simplify-home-component{max-width:100%}html{scroll-behavior:smooth}`,"simplify-home-style");return{export:Object.assign({template:o},{components:{"minimal-home":()=>e.importAsync("minimal-home.vue"),"simple-home":()=>e.importAsync("simple-home.vue")},computed:{activeComponent(){return this.homeStyle==="清爽"?"simple-home":"minimal-home"}},props:{homeStyle:String}})}})();
|
||||||
2
min/simplify-liveroom.min.css
vendored
2
min/simplify-liveroom.min.css
vendored
File diff suppressed because one or more lines are too long
2
min/slideshow-cards.vue.min.js
vendored
2
min/slideshow-cards.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/trending-videos.min.js
vendored
2
min/trending-videos.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(t,e)=>{const a=async()=>{const{isVideoCardBlocked:t}=await e.importAsync("feeds-apis");if(!unsafeWindow.__INITIAL_STATE__){throw new Error("unsafeWindow.__INITIAL_STATE__ not available")}if(unsafeWindow.__INITIAL_STATE__.recommendData){return unsafeWindow.__INITIAL_STATE__.recommendData.item.map((t=>({id:t.id,aid:t.id,bvid:t.bvid,description:t.desc,duration:t.duration,durationText:formatDuration(t.duration),coverUrl:t.pic.replace("http:","https:"),title:t.title,playCount:formatCount(t.stat.view),upName:t.owner.name,upFaceUrl:t.owner.face.replace("http:","https:")}))).filter((e=>!t(e)))}return unsafeWindow.__INITIAL_STATE__.recommendList.map((t=>({id:t.aid,aid:t.aid,bvid:t.bvid,timestamp:t.ctime*1e3,time:new Date(t.ctime*1e3),description:t.desc,duration:t.duration,durationText:formatDuration(t.duration),coverUrl:t.pic.replace("http:","https:"),title:t.title,coins:formatCount(t.stat.coin),danmakuCount:formatCount(t.stat.danmaku),like:formatCount(t.stat.like),playCount:formatCount(t.stat.view),upName:t.owner.name,upFaceUrl:t.owner.face.replace("http:","https:")}))).filter((e=>!t(e)))};return{export:{getTrendingVideos:a}}})();
|
(()=>(t,e)=>{const i=async()=>{const{isVideoCardBlocked:i}=await e.importAsync("feeds-apis");const o="https://api.bilibili.com/x/web-interface/index/top/rcmd?fresh_type=0&version=1";const a=Boolean(getUID())&&t.simpleHomePersonalized;const n=a?"getJsonWithCredentials":"getJson";const{code:r,message:s,data:d}=await Ajax[n](o);if(r!==0){throw new Error(`获取${a?"推荐":"热门"}视频失败: ${s}`)}const p=d.item;return p.map((t=>{const e={id:t.id,aid:t.id,bvid:t.bvid,coverUrl:t.pic.replace("http:","https:"),title:t.title,description:"",duration:t.duration,durationText:formatDuration(t.duration),timestamp:t.pubdate*1e3,time:new Date(t.pubdate*1e3),upName:t.owner.name,upID:t.owner.mid,upFaceUrl:t.owner.face.replace("http:","https:"),like:formatCount(t.stat.like),playCount:formatCount(t.stat.view)};return e})).filter((t=>!i(t)))};return{export:{getTrendingVideos:i}}})();
|
||||||
2
min/trending-videos.vue.min.js
vendored
2
min/trending-videos.vue.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>(e,n)=>{const t=`<div class=trendings><div class=header><div class=title>热门</div><div class=page><div class=prev-page @click=scroll(-1)><icon type=extended icon=left-arrow></icon></div><div class=next-page @click=scroll(1)><icon type=extended icon=right-arrow></icon></div></div></div><div class=contents ref=contents><div class=card-wrapper v-for="card in trendingCards":key=card.id><video-card :data=card orientation=vertical></video-card></div></div></div>`;n.applyStyleFromText(`.simple-home .trendings{display:flex;flex-direction:column}.simple-home .trendings .header{padding:0 8px}.simple-home .trendings .header .page{display:flex;align-items:center}.simple-home .trendings .header .page>*{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#8882;border-radius:50%;margin-left:8px;cursor:pointer}.simple-home .trendings .header .page>:hover{background-color:#8884}.simple-home .trendings .header .page .prev-page .be-icon{transform:translateX(-1px)}.simple-home .trendings .header .page .next-page .be-icon{transform:translateX(1px)}.simple-home .trendings .contents{--card-width:200px;--card-height:250px;--card-count:3;margin-top:16px;display:flex;overflow:auto;height:calc(var(--card-height) + 16px);width:calc((var(--card-width) + 16px) * var(--card-count));scrollbar-width:none!important}@media screen and (max-width:1300px) and (min-width:900px){.simple-home .trendings .contents{--card-count:2}}@media screen and (max-width:1100px) and (min-width:900px){.simple-home .trendings .contents{--card-count:4}}@media screen and (min-width:1550px){.simple-home .trendings .contents{--card-count:4}}@media screen and (min-width:1850px){.simple-home .trendings .contents{--card-count:5}}.simple-home .trendings .contents::-webkit-scrollbar{width:0!important;height:0!important}.simple-home .trendings .contents .card-wrapper{padding:0 8px;scroll-snap-align:start;flex-shrink:0}`,"trending-videos-style");return{export:Object.assign({template:t},{components:{VideoCard:()=>n.importAsync("video-card.vue"),Icon:()=>n.importAsync("icon.vue")},data(){return{trendingCards:[]}},methods:{scroll(e){const n=this.$refs.contents;const t=getComputedStyle(n);const i=parseFloat(t.getPropertyValue("--card-count"));const r=parseFloat(t.getPropertyValue("--card-width"));const a=16;const s=i*(r+a);n.scrollBy(e*s,0)}},async created(){const{getTrendingVideos:e}=await n.importAsync("trending-videos");this.trendingCards=await e()},async mounted(){let e;addSettingsListener("simpleHomeWheelScroll",(async t=>{if(t){const t=this.$refs.contents;const{enableHorizontalScroll:i}=await n.importAsync("horizontal-scroll");e=i(t)}else{e&&e()}}),true);const t=this.$refs.contents;await SpinQuery.condition((()=>t),(()=>t.childElementCount>0));n.applyImportantStyleFromText(`\n .simple-home.snap .trendings .contents {\n scroll-snap-type: x mandatory;\n }\n`,"trending-videos-snap-fix")}})}})();
|
(()=>(e,t)=>{const n=`<div class=trendings><div class=header><div class=title>{{ trendingTitle }}</div><div class=page><div v-if=personalized class=refresh @click=refreshCards><icon type=mdi icon=refresh></icon></div><div class=prev-page @click=scroll(-1)><icon type=extended icon=left-arrow></icon></div><div class=next-page @click=scroll(1)><icon type=extended icon=right-arrow></icon></div></div></div><div class="contents edge-gradient"ref=contents @scroll=checkScrollPosition :class="{ 'is-bottom': isBottom }"><div class=card-wrapper v-for="card in trendingCards":key=card.id><video-card :data=card orientation=vertical></video-card></div></div></div>`;t.applyStyleFromText(`.simple-home .trendings{display:flex;flex-direction:column}.simple-home .trendings .header{padding:0 8px}.simple-home .trendings .header .page{display:flex;align-items:center}.simple-home .trendings .header .page>*{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#8882;border-radius:50%;margin-left:8px;cursor:pointer}.simple-home .trendings .header .page>:hover{background-color:#8884}.simple-home .trendings .header .page .prev-page .be-icon{transform:translateX(-1px)}.simple-home .trendings .header .page .next-page .be-icon{transform:translateX(1px)}.simple-home .trendings .header .page .refresh .be-icon{transition-duration:.5s;transform:scale(.9)}.simple-home .trendings .header .page .refresh:hover .be-icon{transform:scale(.9) rotate(360deg)}.simple-home .trendings .contents{--card-width:200px;--card-height:250px;--card-count:4;margin-top:16px;display:flex;overflow:auto;height:calc(var(--card-height) + 16px);width:calc((var(--card-width) + 16px) * var(--card-count));scrollbar-width:none!important}@media screen and (max-width:1300px) and (min-width:900px){.simple-home .trendings .contents{--card-count:3}}@media screen and (max-width:1100px) and (min-width:900px){.simple-home .trendings .contents{--card-count:5}}@media screen and (min-width:1550px){.simple-home .trendings .contents{--card-count:5}}@media screen and (min-width:1850px){.simple-home .trendings .contents{--card-count:6}}.simple-home .trendings .contents::-webkit-scrollbar{width:0!important;height:0!important}.simple-home .trendings .contents .card-wrapper{padding:0 8px;scroll-snap-align:start;flex-shrink:0}`,"trending-videos-style");return{export:Object.assign({template:n},{components:{VideoCard:()=>t.importAsync("video-card.vue"),Icon:()=>t.importAsync("icon.vue")},data(){const t=getUID()&&e.simpleHomePersonalized;return{personalized:t,isBottom:false,trendingTitle:t?"推荐":"热门",trendingCards:[]}},methods:{async refreshCards(){const{getTrendingVideos:e}=await t.importAsync("trending-videos");this.trendingCards=await e()},scroll(e){const t=this.$refs.contents;const n=getComputedStyle(t);const i=parseFloat(n.getPropertyValue("--card-count"));const r=parseFloat(n.getPropertyValue("--card-width"));const s=16;const o=i*(r+s);t.scrollBy(e*o,0)},checkScrollPosition:_.debounce((function e(t){const n=t.target;this.isBottom=n.scrollWidth-n.scrollLeft===n.clientWidth}),200)},async created(){await this.refreshCards()},async mounted(){let e;addSettingsListener("simpleHomeWheelScroll",(async n=>{if(n){const n=this.$refs.contents;const{enableHorizontalScroll:i}=await t.importAsync("horizontal-scroll");e=i(n)}else{e&&e()}}),true);const n=this.$refs.contents;await SpinQuery.condition((()=>n),(()=>n.childElementCount>0));t.applyImportantStyleFromText(`\n .simple-home.snap .trendings .contents {\n scroll-snap-type: x mandatory;\n }\n`,"trending-videos-snap-fix")}})}})();
|
||||||
2
min/video-card.vue.min.js
vendored
2
min/video-card.vue.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/video-speed-controller.min.js
vendored
2
min/video-speed-controller.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name Bilibili Evolved (Preview)
|
// @name Bilibili Evolved (Preview)
|
||||||
// @version 1.12.16
|
// @version 1.12.19
|
||||||
// @description Bilibili Evolved 的预览版, 可以抢先体验新功能.
|
// @description Bilibili Evolved 的预览版, 可以抢先体验新功能.
|
||||||
// @author Grant Howard, Coulomb-G
|
// @author Grant Howard, Coulomb-G
|
||||||
// @copyright 2021, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G)
|
// @copyright 2021, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G)
|
||||||
|
|||||||
@ -494,6 +494,7 @@ Resource.manifest = {
|
|||||||
simplifyHome: '简化首页',
|
simplifyHome: '简化首页',
|
||||||
simplifyHomeStyle: '首页风格',
|
simplifyHomeStyle: '首页风格',
|
||||||
simpleHomeWheelScroll: '允许横向滚动',
|
simpleHomeWheelScroll: '允许横向滚动',
|
||||||
|
simpleHomePersonalized: '个性化推荐',
|
||||||
},
|
},
|
||||||
dropdown: {
|
dropdown: {
|
||||||
key: 'simplifyHomeStyle',
|
key: 'simplifyHomeStyle',
|
||||||
|
|||||||
@ -165,6 +165,11 @@ export const settings = {
|
|||||||
doubleClickFullscreenPreventSingleClick: false,
|
doubleClickFullscreenPreventSingleClick: false,
|
||||||
simplifyHome: false,
|
simplifyHome: false,
|
||||||
simplifyHomeStyle: '清爽',
|
simplifyHomeStyle: '清爽',
|
||||||
|
simpleHomeCategoryOrders: { ...simpleHomeCategoryDefaultOrders },
|
||||||
|
simpleHomeBangumiLayout: '时间表',
|
||||||
|
simpleHomeWheelScroll: true,
|
||||||
|
simpleHomePersonalized: true,
|
||||||
|
simpleHomeLayoutFill: true,
|
||||||
minimalHomeSettings: {
|
minimalHomeSettings: {
|
||||||
showSearch: true,
|
showSearch: true,
|
||||||
backgroundImage: '',
|
backgroundImage: '',
|
||||||
@ -193,17 +198,12 @@ export const settings = {
|
|||||||
defaultMedalID: 0,
|
defaultMedalID: 0,
|
||||||
autoMatchMedal: false,
|
autoMatchMedal: false,
|
||||||
customStyles: [],
|
customStyles: [],
|
||||||
simpleHomeCategoryOrders: { ...simpleHomeCategoryDefaultOrders },
|
|
||||||
simpleHomeBangumiLayout: '时间表',
|
|
||||||
simpleHomeWheelScroll: true,
|
|
||||||
keymapJumpSeconds: 85,
|
keymapJumpSeconds: 85,
|
||||||
urlParamsClean: true,
|
urlParamsClean: true,
|
||||||
collapseLiveSideBar: true,
|
collapseLiveSideBar: true,
|
||||||
noDarkOnMember: true,
|
noDarkOnMember: true,
|
||||||
feedsTranslate: false,
|
|
||||||
feedsTranslateProvider: 'Bing',
|
feedsTranslateProvider: 'Bing',
|
||||||
feedsTranslateLanguage: '',
|
feedsTranslateLanguage: '',
|
||||||
commentsTranslate: false,
|
|
||||||
downloadVideoQuality: 120,
|
downloadVideoQuality: 120,
|
||||||
defaultLiveQuality: '原画',
|
defaultLiveQuality: '原画',
|
||||||
foregroundColorMode: '自动',
|
foregroundColorMode: '自动',
|
||||||
@ -225,7 +225,7 @@ export const settings = {
|
|||||||
quickFavoriteID: 0,
|
quickFavoriteID: 0,
|
||||||
bilibiliSimpleNewHomeCompatible: false,
|
bilibiliSimpleNewHomeCompatible: false,
|
||||||
disableFeedsDetails: true,
|
disableFeedsDetails: true,
|
||||||
elegantScrollbar: true,
|
elegantScrollbar: !navigator.platform.toLowerCase().includes('mac'),
|
||||||
danmakuSendBar: false,
|
danmakuSendBar: false,
|
||||||
watchLaterRedirectNavbar: true,
|
watchLaterRedirectNavbar: true,
|
||||||
watchLaterRedirectPage: true,
|
watchLaterRedirectPage: true,
|
||||||
@ -262,9 +262,12 @@ export const settings = {
|
|||||||
scrollOutPlayerAutoLightOn: true,
|
scrollOutPlayerAutoLightOn: true,
|
||||||
disableDanmakuHighlights: false,
|
disableDanmakuHighlights: false,
|
||||||
disableUpDanmakuStyle: false,
|
disableUpDanmakuStyle: false,
|
||||||
|
noNotifyV2: false,
|
||||||
cache: {},
|
cache: {},
|
||||||
}
|
}
|
||||||
const fixedSettings = {
|
const fixedSettings = {
|
||||||
|
feedsTranslate: false,
|
||||||
|
commentsTranslate: false,
|
||||||
seedsToCoins: false,
|
seedsToCoins: false,
|
||||||
autoSeedsToCoins: false,
|
autoSeedsToCoins: false,
|
||||||
lastSeedsToCoinsDate: 0,
|
lastSeedsToCoinsDate: 0,
|
||||||
|
|||||||
@ -173,12 +173,13 @@ export const getDpiSourceSet = (src, baseSize, forceExtension = '') => {
|
|||||||
}).join(",")
|
}).join(",")
|
||||||
}
|
}
|
||||||
export const isOffline = () => typeof offlineData !== 'undefined'
|
export const isOffline = () => typeof offlineData !== 'undefined'
|
||||||
export const getUID = () => document.cookie.replace(/(?:(?:^|.*;\s*)DedeUserID\s*\=\s*([^;]*).*$)|^.*$/, '$1')
|
export const getCookieValue = (name) => document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)${name}\\s*\\=\\s*([^;]*).*$)|^.*$`), '$1')
|
||||||
|
export const getUID = () => getCookieValue('DedeUserID')
|
||||||
export const scriptVersion = (() => {
|
export const scriptVersion = (() => {
|
||||||
const match = GM.info.script.name.match(/Evolved \((.*)\)/)
|
const match = GM.info.script.name.match(/Evolved \((.*)\)/)
|
||||||
return match ? match[1] : 'Stable'
|
return match ? match[1] : 'Stable'
|
||||||
})()
|
})()
|
||||||
export const getCsrf = () => document.cookie.replace(/(?:(?:^|.*;\s*)bili_jct\s*\=\s*([^;]*).*$)|^.*$/, '$1')
|
export const getCsrf = () => getCookieValue('bili_jct')
|
||||||
export const formatCount = (count) => {
|
export const formatCount = (count) => {
|
||||||
if (typeof count === 'string') {
|
if (typeof count === 'string') {
|
||||||
count = parseInt(count)
|
count = parseInt(count)
|
||||||
|
|||||||
16
src/global.d.ts
vendored
16
src/global.d.ts
vendored
@ -193,10 +193,10 @@ declare global {
|
|||||||
}
|
}
|
||||||
interface Document {
|
interface Document {
|
||||||
pictureInPictureElement: HTMLElement | null
|
pictureInPictureElement: HTMLElement | null
|
||||||
exitPictureInPicture: () => void
|
|
||||||
}
|
}
|
||||||
interface HTMLVideoElement {
|
const BwpElement: {
|
||||||
requestPictureInPicture: () => void
|
new(): HTMLVideoElement
|
||||||
|
prototype: HTMLVideoElement
|
||||||
}
|
}
|
||||||
class SpinQuery {
|
class SpinQuery {
|
||||||
static condition<T>(query: () => T, condition: (queryResult: T) => boolean, success: (queryResult: T) => void, failed?: () => void): void
|
static condition<T>(query: () => T, condition: (queryResult: T) => boolean, success: (queryResult: T) => void, failed?: () => void): void
|
||||||
@ -422,6 +422,11 @@ declare global {
|
|||||||
doubleClickFullscreenPreventSingleClick: boolean
|
doubleClickFullscreenPreventSingleClick: boolean
|
||||||
simplifyHome: boolean,
|
simplifyHome: boolean,
|
||||||
simplifyHomeStyle: '清爽' | '极简',
|
simplifyHomeStyle: '清爽' | '极简',
|
||||||
|
simpleHomeCategoryOrders: SimpleHomeCategoryOrders,
|
||||||
|
simpleHomeBangumiLayout: '时间表' | '动态',
|
||||||
|
simpleHomeWheelScroll: boolean,
|
||||||
|
simpleHomePersonalized: boolean,
|
||||||
|
simpleHomeLayoutFill: boolean,
|
||||||
minimalHomeSettings: {
|
minimalHomeSettings: {
|
||||||
showSearch: boolean,
|
showSearch: boolean,
|
||||||
backgroundImage: string,
|
backgroundImage: string,
|
||||||
@ -451,9 +456,6 @@ declare global {
|
|||||||
defaultMedalID: number,
|
defaultMedalID: number,
|
||||||
autoMatchMedal: boolean,
|
autoMatchMedal: boolean,
|
||||||
customStyles: CustomStyle[],
|
customStyles: CustomStyle[],
|
||||||
simpleHomeCategoryOrders: SimpleHomeCategoryOrders,
|
|
||||||
simpleHomeBangumiLayout: '时间表' | '动态',
|
|
||||||
simpleHomeWheelScroll: boolean,
|
|
||||||
keymapJumpSeconds: number,
|
keymapJumpSeconds: number,
|
||||||
urlParamsClean: boolean,
|
urlParamsClean: boolean,
|
||||||
collapseLiveSideBar: boolean,
|
collapseLiveSideBar: boolean,
|
||||||
@ -525,6 +527,7 @@ declare global {
|
|||||||
scrollOutPlayerAutoLightOn: boolean,
|
scrollOutPlayerAutoLightOn: boolean,
|
||||||
disableDanmakuHighlights: boolean,
|
disableDanmakuHighlights: boolean,
|
||||||
disableUpDanmakuStyle: boolean,
|
disableUpDanmakuStyle: boolean,
|
||||||
|
noNotifyV2: boolean,
|
||||||
}
|
}
|
||||||
const GM_info: MonkeyInfo
|
const GM_info: MonkeyInfo
|
||||||
function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void }
|
function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void }
|
||||||
@ -571,6 +574,7 @@ declare global {
|
|||||||
const descendingSort: <T>(itemProp: (item: T) => number) => (a: T, b: T) => number
|
const descendingSort: <T>(itemProp: (item: T) => number) => (a: T, b: T) => number
|
||||||
const getDpiSourceSet: (src: string, baseSize: number | string | { width?: number | string, height?: number | string }, extension?: string) => string
|
const getDpiSourceSet: (src: string, baseSize: number | string | { width?: number | string, height?: number | string }, extension?: string) => string
|
||||||
const isOffline: () => boolean
|
const isOffline: () => boolean
|
||||||
|
const getCookieValue: (name: string) => string
|
||||||
const getUID: () => string
|
const getUID: () => string
|
||||||
const getCsrf: () => string
|
const getCsrf: () => string
|
||||||
const formatCount: (count: number | string) => string
|
const formatCount: (count: number | string) => string
|
||||||
|
|||||||
@ -10,8 +10,8 @@
|
|||||||
},
|
},
|
||||||
callback: async controlBar => {
|
callback: async controlBar => {
|
||||||
const leftController = dq(controlBar, '.left-area') as HTMLDivElement
|
const leftController = dq(controlBar, '.left-area') as HTMLDivElement
|
||||||
const originalTextArea = await SpinQuery.select('.chat-input-ctnr .chat-input') as HTMLTextAreaElement
|
const originalTextArea = await SpinQuery.select('.control-panel-ctnr .chat-input-ctnr .chat-input') as HTMLTextAreaElement
|
||||||
const sendButton = await SpinQuery.select('.chat-input-ctnr ~ .bottom-actions .bl-button--primary') as HTMLButtonElement
|
const sendButton = await SpinQuery.select('.control-panel-ctnr .chat-input-ctnr ~ .bottom-actions .bl-button--primary') as HTMLButtonElement
|
||||||
|
|
||||||
if ([leftController, originalTextArea, sendButton].some(it => it === null)) {
|
if ([leftController, originalTextArea, sendButton].some(it => it === null)) {
|
||||||
console.warn('[danmakuSendBar] ref elements not found', leftController === null, originalTextArea === null, sendButton === null)
|
console.warn('[danmakuSendBar] ref elements not found', leftController === null, originalTextArea === null, sendButton === null)
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
&-kanban .live-haruna-ctnr,
|
&-kanban .live-haruna-ctnr,
|
||||||
&-enterPrompt .chat-item.important-prompt-item,
|
&-enterPrompt .chat-item.important-prompt-item,
|
||||||
&-enterPrompt .chat-history-panel .brush-prompt,
|
&-enterPrompt .chat-history-panel .brush-prompt,
|
||||||
|
&-enterPrompt .chat-item.convention-msg,
|
||||||
&-pk .chaos-pk,
|
&-pk .chaos-pk,
|
||||||
&-topRank .chat-item.top3-notice,
|
&-topRank .chat-item.top3-notice,
|
||||||
&-topRank .chat-item .rank-icon {
|
&-topRank .chat-item .rank-icon {
|
||||||
|
|||||||
@ -173,12 +173,16 @@
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
.comment-submit {
|
.comment-submit {
|
||||||
|
height: 64px !important;
|
||||||
padding: 4px 15px !important;
|
padding: 4px 15px !important;
|
||||||
position: relative !important;
|
position: relative !important;
|
||||||
right: 0 !important;
|
right: 0 !important;
|
||||||
margin-left: 10px !important;
|
margin-left: 10px !important;
|
||||||
}
|
}
|
||||||
// .comment-submit,
|
.textarea-container .baffle {
|
||||||
|
line-height: 65px !important;
|
||||||
|
}
|
||||||
|
.textarea-container .baffle,
|
||||||
.textarea-container .ipt-txt {
|
.textarea-container .ipt-txt {
|
||||||
height: 65px !important;
|
height: 65px !important;
|
||||||
width: calc(100% - 80px) !important;
|
width: calc(100% - 80px) !important;
|
||||||
@ -499,5 +503,5 @@ body.dark .panel-area .bb-comment {
|
|||||||
top: -72px !important;
|
top: -72px !important;
|
||||||
}
|
}
|
||||||
.v-wrap #comment {
|
.v-wrap #comment {
|
||||||
z-index: 1 !important;
|
z-index: 21 !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -152,7 +152,9 @@ li.nav-item[report-id="playpage_dynamic"] .i-frame,
|
|||||||
.international-header .mini-header,
|
.international-header .mini-header,
|
||||||
.bili-header-m .head-banner .head-content .head-logo,
|
.bili-header-m .head-banner .head-content .head-logo,
|
||||||
#biliMainHeader .mini-header,
|
#biliMainHeader .mini-header,
|
||||||
#biliMainHeader .base-mini-header {
|
#biliMainHeader .base-mini-header,
|
||||||
|
.home-header .mini-header-container,
|
||||||
|
.bili-header__bar {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
.van-popover {
|
.van-popover {
|
||||||
@ -205,6 +207,9 @@ li.nav-item[report-id="playpage_dynamic"] .i-frame,
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
|
body.player-fullscreen-fix & {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
&:not(.fill) .custom-navbar-iconfont {
|
&:not(.fill) .custom-navbar-iconfont {
|
||||||
color: var(--theme-color);
|
color: var(--theme-color);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,7 +74,7 @@ export default (() => {
|
|||||||
true
|
true
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
SpinQuery.select('#banner_link,.international-header .bili-banner').then(banner => {
|
SpinQuery.select('#banner_link,.international-header .bili-banner, .bili-header__banner').then(banner => {
|
||||||
if (banner === null || !(banner instanceof HTMLElement)) {
|
if (banner === null || !(banner instanceof HTMLElement)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -338,6 +338,9 @@ export class SearchBox extends NavbarComponent {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
keywordInput.addEventListener('keydown', e => {
|
keywordInput.addEventListener('keydown', e => {
|
||||||
|
if (e.isComposing) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (e.key === 'ArrowDown' && searchList.items.length > 0) {
|
if (e.key === 'ArrowDown' && searchList.items.length > 0) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopImmediatePropagation();
|
e.stopImmediatePropagation();
|
||||||
|
|||||||
@ -439,3 +439,276 @@
|
|||||||
@include color("a");
|
@include color("a");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#i_cecream {
|
||||||
|
@include background-color();
|
||||||
|
.mini-header {
|
||||||
|
.header-entry-avatar {
|
||||||
|
@include border-color("3");
|
||||||
|
}
|
||||||
|
.default-entry,
|
||||||
|
.right-entry-icon,
|
||||||
|
.mini-header__title > span {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
.right-entry-text {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
.header-upload-entry {
|
||||||
|
@include theme-background-color();
|
||||||
|
@include foreground-color();
|
||||||
|
.header-upload-entry__icon {
|
||||||
|
@include foreground-color();
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
@include theme-background-color("90");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bili-header,
|
||||||
|
.home-header {
|
||||||
|
@include background-color();
|
||||||
|
&__banner {
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
&.fixed-top .home-header__bar {
|
||||||
|
@include background-color("2");
|
||||||
|
}
|
||||||
|
&__channel {
|
||||||
|
@include background-color();
|
||||||
|
.channel-entry-more__link,
|
||||||
|
.channel-link {
|
||||||
|
@include color("e");
|
||||||
|
@include background-color("3");
|
||||||
|
@include border-color();
|
||||||
|
&:hover {
|
||||||
|
@include color("e");
|
||||||
|
@include background-color("5");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.channel-icons {
|
||||||
|
&__item {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
.channel-notify {
|
||||||
|
@include border-color("2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary-btn {
|
||||||
|
@include color("e");
|
||||||
|
@include background-color("3");
|
||||||
|
@include border-color();
|
||||||
|
&:hover {
|
||||||
|
@include background-color("5");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.area-header {
|
||||||
|
.roll-btn {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
@include color("e");
|
||||||
|
&:hover {
|
||||||
|
@include theme-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.track-switch {
|
||||||
|
@include background-color("3");
|
||||||
|
@include color("a");
|
||||||
|
|
||||||
|
.switch-bar {
|
||||||
|
@include theme-background-color();
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
&:hover {
|
||||||
|
@include background-color("5");
|
||||||
|
}
|
||||||
|
&.is-active {
|
||||||
|
@include foreground-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
:not(.aside-head) > .area-header {
|
||||||
|
.mouse-switch > * {
|
||||||
|
@include color("a");
|
||||||
|
@include background-color("3");
|
||||||
|
&:hover {
|
||||||
|
@include color("a");
|
||||||
|
@include background-color("5");
|
||||||
|
}
|
||||||
|
&.is-active {
|
||||||
|
@include theme-background-color();
|
||||||
|
@include foreground-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aside-head {
|
||||||
|
.mouse-switch > * {
|
||||||
|
@include color("a");
|
||||||
|
&.is-active {
|
||||||
|
@include theme-color();
|
||||||
|
&::after {
|
||||||
|
@include theme-background-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aside-body {
|
||||||
|
.list-state-error,
|
||||||
|
.list-state-nothing,
|
||||||
|
.list-state-loading {
|
||||||
|
@include background-color("4");
|
||||||
|
span {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.v-popover-content {
|
||||||
|
@include border-color();
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
$media-types: (video, bangumi, cheese, live, manga, movie, ogv, article);
|
||||||
|
@each $type in $media-types {
|
||||||
|
.bili-rank-list-#{$type} {
|
||||||
|
&__list {
|
||||||
|
@include border-color();
|
||||||
|
@include background-color();
|
||||||
|
}
|
||||||
|
&__item:nth-of-type(2n + 1) {
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
&__item:nth-of-type(2n) {
|
||||||
|
@include background-color("4");
|
||||||
|
}
|
||||||
|
.rank-#{$type}-card {
|
||||||
|
&__popover {
|
||||||
|
@include background-color();
|
||||||
|
&--icon,
|
||||||
|
&--stats,
|
||||||
|
&--subtitle,
|
||||||
|
&--author {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
&--stats {
|
||||||
|
@include border-color("4");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__cover {
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
&__info--pts,
|
||||||
|
&__info--schedule,
|
||||||
|
&__info--styles {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bili-#{$type}-card {
|
||||||
|
&__info--tit {
|
||||||
|
&:hover {
|
||||||
|
@include theme-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__info--living {
|
||||||
|
@include to-theme("pink");
|
||||||
|
}
|
||||||
|
&__info--pub,
|
||||||
|
&__info--subtitle,
|
||||||
|
&__info--styles,
|
||||||
|
&__info--uname {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
&__info--owner {
|
||||||
|
@include color("a");
|
||||||
|
&:hover {
|
||||||
|
@include theme-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.v-img,
|
||||||
|
&__image,
|
||||||
|
&__cover,
|
||||||
|
&__image--wrap {
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
|
||||||
|
&__skeleton {
|
||||||
|
&--light,
|
||||||
|
&--text,
|
||||||
|
&--face,
|
||||||
|
&--cover {
|
||||||
|
@include background-color("4");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__wrap {
|
||||||
|
@include background-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.n-drawer-container .elevator {
|
||||||
|
@include background-color("2");
|
||||||
|
.elevator-head {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
|
||||||
|
.elevator-core {
|
||||||
|
&.is-active {
|
||||||
|
@include background-color("3");
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
@include background-color("4");
|
||||||
|
}
|
||||||
|
.name {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#bili-footer {
|
||||||
|
@include background-color();
|
||||||
|
.split-line {
|
||||||
|
@include background-color("4");
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
@include color("e");
|
||||||
|
&:hover {
|
||||||
|
@include theme-color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.link-item .bt {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
.text-con {
|
||||||
|
&__line {
|
||||||
|
&--link {
|
||||||
|
@include color("a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.footer-qrcode-popover,
|
||||||
|
.footer-wechat-popover {
|
||||||
|
.qrcode-text {
|
||||||
|
@include color("e");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.gm-skeleton {
|
||||||
|
.chat-input-ctnr {
|
||||||
|
@include border-color("3");
|
||||||
|
@include background-color("2");
|
||||||
|
.medal-section {
|
||||||
|
@include border-color("3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -24,7 +24,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
srcset: null,
|
srcset: null,
|
||||||
actualSrc: null,
|
actualSrc: EmptyImageUrl,
|
||||||
isPlaceholderActive: false,
|
isPlaceholderActive: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -51,7 +51,7 @@ export default {
|
|||||||
if (this.placeholderImage) {
|
if (this.placeholderImage) {
|
||||||
this.actualSrc = `https://s1.hdslb.com/bfs/static/blive/live-web-center/static/img/no-cover.1ebe4d5.jpg`
|
this.actualSrc = `https://s1.hdslb.com/bfs/static/blive/live-web-center/static/img/no-cover.1ebe4d5.jpg`
|
||||||
} else {
|
} else {
|
||||||
this.actualSrc = null
|
this.actualSrc = EmptyImageUrl
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#banner_link,
|
#banner_link,
|
||||||
.z-top-container.has-banner > .header,
|
.z-top-container.has-banner > .header,
|
||||||
.custom-navbar .blur-layer {
|
.custom-navbar .blur-layer,
|
||||||
|
.bili-header__banner {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
div.blur-bg,
|
div.blur-bg,
|
||||||
|
|||||||
@ -21,6 +21,12 @@ const homeHiddenOptions: HomeHiddenOption[] = [
|
|||||||
height: 24px !important;
|
height: 24px !important;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
.bili-header__channel {
|
||||||
|
height: 12px !important;
|
||||||
|
}
|
||||||
|
.bili-header__channel > * {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -29,30 +35,36 @@ const homeHiddenOptions: HomeHiddenOption[] = [
|
|||||||
.first-screen .space-between {
|
.first-screen .space-between {
|
||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
}
|
}
|
||||||
.rcmd-box-wrap { display: none !important; }
|
.bili-layout .bili-grid:first-child,
|
||||||
|
.rcmd-box-wrap {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'online', displayName: '在线列表', style: `
|
name: 'online', displayName: '在线列表(旧版)', style: `
|
||||||
.first-screen #reportFirst2 { display: none !important; }
|
.first-screen #reportFirst2 { display: none !important; }
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ext-box', displayName: '电竞赛事', style: `
|
name: 'ext-box', displayName: '赛事(旧版)', style: `
|
||||||
.first-screen #reportFirst3 { display: none !important; } `,
|
.first-screen #reportFirst3 { display: none !important; } `,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'special', displayName: '特别推荐', style: `
|
name: 'special', displayName: '特别推荐(旧版)', style: `
|
||||||
#bili_report_spe_rec { display: none !important; }
|
#bili_report_spe_rec { display: none !important; }
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'contact', displayName: '联系方式', style: `
|
name: 'contact', displayName: '联系方式', style: `
|
||||||
.international-footer { display: none !important; }
|
.bili-footer .b-footer-wrap,
|
||||||
|
.international-footer {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'elevator', displayName: '右侧分区导航', style: `
|
name: 'elevator', displayName: '右侧分区导航(旧版)', style: `
|
||||||
.storey-box .elevator { display: none !important; }
|
.storey-box .elevator { display: none !important; }
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
@ -76,17 +88,58 @@ const syncState = (item: HomeHiddenOption) => {
|
|||||||
if (!isHome()) {
|
if (!isHome()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const generatedOptions: HomeHiddenOption[] = (await SpinQuery.condition(
|
const homeOptions: Promise<HomeHiddenOption[]> = (async () => {
|
||||||
|
const isNewHome = getCookieValue('i-wanna-go-back') === '-1'
|
||||||
|
const isNotHome = document.URL !== 'https://www.bilibili.com/'
|
||||||
|
if (!isNewHome) {
|
||||||
|
const list = await SpinQuery.condition(
|
||||||
() => dqa('.proxy-box > div'),
|
() => dqa('.proxy-box > div'),
|
||||||
elements => elements.length > 0 || document.URL !== 'https://www.bilibili.com/',
|
elements => elements.length > 0 || isNotHome,
|
||||||
)).map(it => ({
|
)
|
||||||
|
return list?.map(it => ({
|
||||||
name: it.id.replace(/^bili_/, ''),
|
name: it.id.replace(/^bili_/, ''),
|
||||||
displayName: it.querySelector('header .name')?.textContent?.trim() ?? '未知分区',
|
displayName: it.querySelector('header .name')?.textContent?.trim() ?? '未知分区',
|
||||||
}))
|
})) ?? []
|
||||||
|
} else {
|
||||||
|
const skipIds = ['推广']
|
||||||
|
const headers = await SpinQuery.condition(
|
||||||
|
() => dqa('.bili-grid .the-world'),
|
||||||
|
elements => elements.length > 3 || isNotHome,
|
||||||
|
)
|
||||||
|
console.log(headers)
|
||||||
|
const getContainer = (header: Element) => {
|
||||||
|
let currentElement = header
|
||||||
|
while (currentElement.parentElement) {
|
||||||
|
if (currentElement.classList.contains('bili-grid')) {
|
||||||
|
return currentElement
|
||||||
|
}
|
||||||
|
currentElement = currentElement.parentElement
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return headers
|
||||||
|
?.filter(element => !skipIds.includes(element.id))
|
||||||
|
.map(element => {
|
||||||
|
const container = getContainer(element) as HTMLElement
|
||||||
|
const name = element.id
|
||||||
|
if (container) {
|
||||||
|
container.dataset.area = name
|
||||||
|
return {
|
||||||
|
name,
|
||||||
|
displayName: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
.filter((it): it is HomeHiddenOption => it !== null) ?? []
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
const generatedOptions = await homeOptions
|
||||||
homeHiddenOptions.push(...generatedOptions)
|
homeHiddenOptions.push(...generatedOptions)
|
||||||
homeHiddenOptions.forEach(syncState)
|
homeHiddenOptions.forEach(syncState)
|
||||||
const generatedStyles = generatedOptions.map(({ name }) => {
|
const generatedStyles = generatedOptions.map(({ name }) => {
|
||||||
return `
|
return `
|
||||||
|
body.home-hidden-${name} .bili-layout .bili-grid[data-area="${name}"],
|
||||||
body.home-hidden-${name} .storey-box .proxy-box #bili_${name} {
|
body.home-hidden-${name} .storey-box .proxy-box #bili_${name} {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -272,10 +272,7 @@ export default {
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
background-color: #f4f4f4;
|
background-color: var(--simplify-home-background);
|
||||||
body.dark & {
|
|
||||||
background-color: #181818;
|
|
||||||
}
|
|
||||||
.icon {
|
.icon {
|
||||||
grid-area: icon;
|
grid-area: icon;
|
||||||
justify-self: center;
|
justify-self: center;
|
||||||
|
|||||||
@ -5,33 +5,48 @@ export interface Blackboard {
|
|||||||
imageUrl: string
|
imageUrl: string
|
||||||
}
|
}
|
||||||
export const getBlackboards = async (): Promise<Blackboard[]> => {
|
export const getBlackboards = async (): Promise<Blackboard[]> => {
|
||||||
if (dq('.international-home')) {
|
const locId = 4694
|
||||||
const initData = await SpinQuery.condition(() => unsafeWindow['__INITIAL_STATE__'], it => it !== undefined)
|
const api = `https://api.bilibili.com/x/web-show/res/locs?pf=0&ids=${locId}`
|
||||||
return dqa('.first-screen .home-slide .item')
|
const { code, message, data } = await Ajax.getJson(api)
|
||||||
.slice(0, 5)
|
if (code !== 0) {
|
||||||
.map((it, index) => {
|
throw new Error(`获取活动卡片失败: ${message}`)
|
||||||
const locID = it.querySelector('a')!.getAttribute('data-loc-id')!
|
|
||||||
return {
|
|
||||||
url: initData.locsData[locID][index].url,
|
|
||||||
title: (it.querySelector('.title') as HTMLElement).textContent!.trim(),
|
|
||||||
isAd: Boolean(it.querySelector('.gg-icon,.bypb-icon')),
|
|
||||||
imageUrl: it.querySelector('img')!.getAttribute('src')!.replace(/@.+$/, ''),
|
|
||||||
} as Blackboard
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
const panel = dq('.chief-recommend-module .panel') as HTMLElement
|
|
||||||
const images = panel.querySelector('.pic') as HTMLElement
|
|
||||||
const titles = panel.querySelectorAll('.title > a')
|
|
||||||
return [...images.querySelectorAll('li')].map((li, index) => {
|
|
||||||
const title = titles[index] as HTMLElement
|
|
||||||
return {
|
|
||||||
url: title.getAttribute('href'),
|
|
||||||
title: title.innerText!.trim(),
|
|
||||||
isAd: Boolean(title.querySelector('.gg-pic')),
|
|
||||||
imageUrl: li.querySelector('img')!.getAttribute('src')!.replace(/@.+$/, ''),
|
|
||||||
} as Blackboard
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
const list: any[] = data[locId]
|
||||||
|
return list.map(it => {
|
||||||
|
return {
|
||||||
|
url: it.url,
|
||||||
|
title: it.name,
|
||||||
|
isAd: it.is_ad_loc,
|
||||||
|
imageUrl: it.pic,
|
||||||
|
} as Blackboard
|
||||||
|
})
|
||||||
|
// if (dq('.international-home')) {
|
||||||
|
// const initData = await SpinQuery.condition(() => unsafeWindow['__INITIAL_STATE__'], it => it !== undefined)
|
||||||
|
// return dqa('.first-screen .home-slide .item')
|
||||||
|
// .slice(0, 5)
|
||||||
|
// .map((it, index) => {
|
||||||
|
// const locID = it.querySelector('a')!.getAttribute('data-loc-id')!
|
||||||
|
// return {
|
||||||
|
// url: initData.locsData[locID][index].url,
|
||||||
|
// title: (it.querySelector('.title') as HTMLElement).textContent!.trim(),
|
||||||
|
// isAd: Boolean(it.querySelector('.gg-icon,.bypb-icon')),
|
||||||
|
// imageUrl: it.querySelector('img')!.getAttribute('src')!.replace(/@.+$/, ''),
|
||||||
|
// } as Blackboard
|
||||||
|
// })
|
||||||
|
// } else {
|
||||||
|
// const panel = dq('.chief-recommend-module .panel') as HTMLElement
|
||||||
|
// const images = panel.querySelector('.pic') as HTMLElement
|
||||||
|
// const titles = panel.querySelectorAll('.title > a')
|
||||||
|
// return [...images.querySelectorAll('li')].map((li, index) => {
|
||||||
|
// const title = titles[index] as HTMLElement
|
||||||
|
// return {
|
||||||
|
// url: title.getAttribute('href'),
|
||||||
|
// title: title.innerText!.trim(),
|
||||||
|
// isAd: Boolean(title.querySelector('.gg-pic')),
|
||||||
|
// imageUrl: li.querySelector('img')!.getAttribute('src')!.replace(/@.+$/, ''),
|
||||||
|
// } as Blackboard
|
||||||
|
// })
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
export: {
|
export: {
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
:title="b.title"
|
:title="b.title"
|
||||||
>
|
>
|
||||||
<dpi-img :src="b.imageUrl" :alt="b.title" :size="{width: 500, height: 250}" :root="cardsContainer"></dpi-img>
|
<dpi-img :src="b.imageUrl" :alt="b.title" :size="{width: 500, height: 250}" :root="cardsContainer"></dpi-img>
|
||||||
<div class="title">{{b.title}}</div>
|
<div class="title" :title="b.title">{{b.title}}</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="jump-dots">
|
<div class="jump-dots">
|
||||||
@ -99,37 +99,45 @@ $first-row-height: 250px;
|
|||||||
|
|
||||||
.jump-dots {
|
.jump-dots {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
left: 50%;
|
||||||
left: 8px;
|
bottom: 0;
|
||||||
transform: translateY(-50%);
|
transform: translateX(-50%);
|
||||||
grid-area: cards;
|
grid-area: cards;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
justify-self: center;
|
justify-self: center;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
& label {
|
& label {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
padding: 8px 6px;
|
||||||
& label:not(:last-child) {
|
cursor: pointer;
|
||||||
margin-bottom: 6px;
|
|
||||||
}
|
}
|
||||||
.jump-dot {
|
.jump-dot {
|
||||||
background-color: #8884;
|
background-color: #8884;
|
||||||
border: 1px solid #8888;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 8px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 8px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.blackboard-cards {
|
.blackboard-cards {
|
||||||
|
display: flex;
|
||||||
grid-area: cards;
|
grid-area: cards;
|
||||||
--blackboard-width: 568.5px;
|
--blackboard-width: 350px;
|
||||||
--blackboard-height: 250px;
|
--blackboard-height: 250px;
|
||||||
|
--image-height: 197px;
|
||||||
width: var(--blackboard-width);
|
width: var(--blackboard-width);
|
||||||
height: var(--blackboard-height);
|
height: var(--blackboard-height);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0 4px 8px 0 #0001;
|
||||||
|
body.dark & {
|
||||||
|
background-color: #282828;
|
||||||
|
}
|
||||||
|
|
||||||
.blackboard-card {
|
.blackboard-card {
|
||||||
|
flex: 0 0 auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -137,27 +145,26 @@ $first-row-height: 250px;
|
|||||||
transition: 0.8s cubic-bezier(0.44, 0.29, 0.13, 1);
|
transition: 0.8s cubic-bezier(0.44, 0.29, 0.13, 1);
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: var(--image-height);
|
||||||
object-fit: fill;
|
object-fit: fill;
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
|
transition-duration: inherit;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 8px;
|
bottom: 24px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
padding: 4px 16px;
|
padding: 0 16px;
|
||||||
color: white;
|
|
||||||
background-color: #000a;
|
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
border-radius: 14px;
|
border-radius: 14px;
|
||||||
|
max-width: var(--blackboard-width);
|
||||||
|
box-sizing: border-box;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
opacity: 0;
|
overflow: hidden;
|
||||||
}
|
text-overflow: ellipsis;
|
||||||
&:hover .title {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -161,9 +161,9 @@ export default {
|
|||||||
--loading-from: #d4d4d4;
|
--loading-from: #d4d4d4;
|
||||||
--loading-to: #ddd;
|
--loading-to: #ddd;
|
||||||
--slideshow-ratio: 0.6;
|
--slideshow-ratio: 0.6;
|
||||||
--rank-width: 370px;
|
--rank-width: 20vw;
|
||||||
--rank-height: calc(var(--rank-width) / 16 * 10);
|
--rank-height: calc(var(--rank-width) / 16 * 10);
|
||||||
--card-height: 280px;
|
--card-height: 22vh;
|
||||||
--card-width: calc(var(--card-height) * (42 / 25));
|
--card-width: calc(var(--card-height) * (42 / 25));
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@ -179,12 +179,12 @@ export default {
|
|||||||
background-color: var(--loading-to);
|
background-color: var(--loading-to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@for $width from 18 through 7 {
|
// @for $width from 18 through 7 {
|
||||||
@media screen and (max-width: #{$width * 100}px) {
|
// @media screen and (max-width: #{$width * 100}px) {
|
||||||
--card-height: #{280 - 8 * (19 - $width)}px;
|
// --card-height: #{280 - 8 * (19 - $width)}px;
|
||||||
--rank-width: #{370 - 20 * (19 - $width)}px;
|
// --rank-width: #{370 - 20 * (19 - $width)}px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
&,
|
&,
|
||||||
& *,
|
& *,
|
||||||
::after,
|
::after,
|
||||||
@ -219,6 +219,9 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 11pt;
|
font-size: 11pt;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
|
margin: 0;
|
||||||
|
height: 20px;
|
||||||
|
box-sizing: content-box;
|
||||||
&::before {
|
&::before {
|
||||||
content: '';
|
content: '';
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -113,13 +113,14 @@ export default {
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
background-color: #f4f4f4;
|
background-color: var(--simplify-home-background);
|
||||||
color: black;
|
color: black;
|
||||||
|
margin: 0;
|
||||||
|
height: auto;
|
||||||
&:link {
|
&:link {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
body.dark & {
|
body.dark & {
|
||||||
background-color: #181818;
|
|
||||||
color: #eee;
|
color: #eee;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
<icon type="home" icon="activity"></icon>全部动态
|
<icon type="home" icon="activity"></icon>全部动态
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="contents" ref="contents">
|
<div class="contents edge-gradient" ref="contents" @scroll="checkScrollPosition" :class="{ 'is-bottom': isBottom }">
|
||||||
<div class="card-wrapper" v-for="card in feedCards" :key="card.id">
|
<div class="card-wrapper" v-for="card in feedCards" :key="card.id">
|
||||||
<video-card :data="card" orientation="vertical"></video-card>
|
<video-card :data="card" orientation="vertical"></video-card>
|
||||||
</div>
|
</div>
|
||||||
@ -82,6 +82,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
online: '--',
|
online: '--',
|
||||||
|
isBottom: false,
|
||||||
tabs,
|
tabs,
|
||||||
currentTab: tabs[0],
|
currentTab: tabs[0],
|
||||||
feedCards: []
|
feedCards: []
|
||||||
@ -112,7 +113,11 @@ export default {
|
|||||||
const gap = 16
|
const gap = 16
|
||||||
const distance = count * (width + gap)
|
const distance = count * (width + gap)
|
||||||
contents.scrollBy(orientation * distance, 0)
|
contents.scrollBy(orientation * distance, 0)
|
||||||
}
|
},
|
||||||
|
checkScrollPosition: _.debounce(function checkScrollPosition(e: Event) {
|
||||||
|
const element = e.target as HTMLElement
|
||||||
|
this.isBottom = element.scrollWidth - element.scrollLeft === element.clientWidth
|
||||||
|
}, 200),
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.updateFeedCards(this.currentTab)
|
this.updateFeedCards(this.currentTab)
|
||||||
@ -209,7 +214,7 @@ export default {
|
|||||||
--card-height: 250px;
|
--card-height: 250px;
|
||||||
--card-count: 4;
|
--card-count: 4;
|
||||||
width: calc((var(--card-width) + 16px) * var(--card-count));
|
width: calc((var(--card-width) + 16px) * var(--card-count));
|
||||||
padding-bottom: 16px;
|
// padding-bottom: 16px;
|
||||||
scrollbar-width: none !important;
|
scrollbar-width: none !important;
|
||||||
min-height: calc(var(--card-height) + 16px);
|
min-height: calc(var(--card-height) + 16px);
|
||||||
@media screen and (max-width: 900px) {
|
@media screen and (max-width: 900px) {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="simple-home" :class="{ snap }">
|
<div class="simple-home" :class="{ snap, 'layout-fill': layoutFill }">
|
||||||
<blackboards></blackboards>
|
<blackboards></blackboards>
|
||||||
<trending-videos></trending-videos>
|
<trending-videos></trending-videos>
|
||||||
<info-row></info-row>
|
<info-row></info-row>
|
||||||
@ -19,12 +19,16 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
snap: false,
|
snap: false,
|
||||||
|
layoutFill: true,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
addSettingsListener('simpleHomeWheelScroll', (value: boolean) => {
|
addSettingsListener('simpleHomeWheelScroll', (value: boolean) => {
|
||||||
this.snap = !value
|
this.snap = !value
|
||||||
}, true)
|
}, true)
|
||||||
|
addSettingsListener('simpleHomeLayoutFill', (value: boolean) => {
|
||||||
|
this.layoutFill = value
|
||||||
|
}, true)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -57,14 +61,14 @@ export default {
|
|||||||
label:nth-child(#{$i})
|
label:nth-child(#{$i})
|
||||||
.jump-dot {
|
.jump-dot {
|
||||||
background-color: var(--theme-color);
|
background-color: var(--theme-color);
|
||||||
height: 40px;
|
width: 40px;
|
||||||
}
|
}
|
||||||
&:checked:nth-of-type(#{$i}) ~ .blackboard-cards .blackboard-card {
|
&:checked:nth-of-type(#{$i}) ~ .blackboard-cards .blackboard-card {
|
||||||
transform: translateY(calc(-1 * #{$i - 1} * var(--blackboard-height))) scale(0.95);
|
transform: translateX(calc(-1 * #{$i - 1} * var(--blackboard-width))) scale(0.9);
|
||||||
&:nth-of-type(#{$i}) {
|
&:nth-of-type(#{$i}) {
|
||||||
transform: translateY(calc(-1 * #{$i - 1} * var(--blackboard-height)));
|
transform: translateX(calc(-1 * #{$i - 1} * var(--blackboard-width)));
|
||||||
img {
|
img {
|
||||||
border-radius: 16px;
|
border-radius: 16px 16px 0 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -187,6 +191,47 @@ export default {
|
|||||||
grid-area: categories;
|
grid-area: categories;
|
||||||
padding-bottom: 32px;
|
padding-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
&.layout-fill {
|
||||||
|
flex: 1;
|
||||||
|
.trendings,
|
||||||
|
.feeds {
|
||||||
|
justify-self: stretch;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.layout-fill .edge-gradient {
|
||||||
|
width: auto;
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
height: calc(var(--card-height) + 16px);
|
||||||
|
width: 10%;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 1;
|
||||||
|
transition: .2s ease-out;
|
||||||
|
}
|
||||||
|
&::before {
|
||||||
|
background-image: linear-gradient(to left, transparent, var(--simplify-home-background));
|
||||||
|
left: 0;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
&::after {
|
||||||
|
background-image: linear-gradient(to right, transparent, var(--simplify-home-background));
|
||||||
|
right: 0;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
&.is-bottom {
|
||||||
|
&::before {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
&::after {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@media screen and (max-width: 1100px) {
|
@media screen and (max-width: 1100px) {
|
||||||
& {
|
& {
|
||||||
grid-template-areas: 'blackboards' 'trendings' 'info' 'feeds' 'categories';
|
grid-template-areas: 'blackboards' 'trendings' 'info' 'feeds' 'categories';
|
||||||
|
|||||||
@ -151,6 +151,7 @@ export default {
|
|||||||
}
|
}
|
||||||
@mixin round-button {
|
@mixin round-button {
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
|
color: inherit;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border: none;
|
border: none;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -227,6 +228,9 @@ export default {
|
|||||||
& > * {
|
& > * {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
color: inherit !important;
|
color: inherit !important;
|
||||||
@ -234,6 +238,7 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
flex-shrink: 0;
|
||||||
@include max-line(2);
|
@include max-line(2);
|
||||||
}
|
}
|
||||||
.up {
|
.up {
|
||||||
@ -258,6 +263,7 @@ export default {
|
|||||||
.description {
|
.description {
|
||||||
@include max-line(6);
|
@include max-line(6);
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="trendings">
|
<div class="trendings">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="title">热门</div>
|
<div class="title">{{ trendingTitle }}</div>
|
||||||
<!-- <div class="tabs">
|
<!-- <div class="tabs">
|
||||||
<div
|
<div
|
||||||
class="tab"
|
class="tab"
|
||||||
@ -14,6 +14,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>-->
|
</div>-->
|
||||||
<div class="page">
|
<div class="page">
|
||||||
|
<div v-if="personalized" class="refresh" @click="refreshCards">
|
||||||
|
<icon type="mdi" icon="refresh"></icon>
|
||||||
|
</div>
|
||||||
<div class="prev-page" @click="scroll(-1)">
|
<div class="prev-page" @click="scroll(-1)">
|
||||||
<icon type="extended" icon="left-arrow"></icon>
|
<icon type="extended" icon="left-arrow"></icon>
|
||||||
</div>
|
</div>
|
||||||
@ -22,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="contents" ref="contents">
|
<div class="contents edge-gradient" ref="contents" @scroll="checkScrollPosition" :class="{ 'is-bottom': isBottom }">
|
||||||
<div class="card-wrapper" v-for="card in trendingCards" :key="card.id">
|
<div class="card-wrapper" v-for="card in trendingCards" :key="card.id">
|
||||||
<video-card :data="card" orientation="vertical"></video-card>
|
<video-card :data="card" orientation="vertical"></video-card>
|
||||||
</div>
|
</div>
|
||||||
@ -33,57 +36,25 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { VideoCardInfo } from '../video-card-info'
|
import { VideoCardInfo } from '../video-card-info'
|
||||||
|
|
||||||
interface Tab {
|
|
||||||
name: string
|
|
||||||
day: number
|
|
||||||
url: string
|
|
||||||
}
|
|
||||||
// const tabs: Tab[] = [
|
|
||||||
// {
|
|
||||||
// name: '今日',
|
|
||||||
// day: 1,
|
|
||||||
// url: 'https://www.bilibili.com/ranking/all/0/0/1'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: '三日',
|
|
||||||
// day: 3,
|
|
||||||
// url: 'https://www.bilibili.com/ranking'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: '一周',
|
|
||||||
// day: 7,
|
|
||||||
// url: 'https://www.bilibili.com/ranking/all/0/0/7'
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
VideoCard: () => import('../video-card.vue'),
|
VideoCard: () => import('../video-card.vue'),
|
||||||
Icon: () => import('../../icon.vue'),
|
Icon: () => import('../../icon.vue'),
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
const personalized = getUID() && settings.simpleHomePersonalized
|
||||||
return {
|
return {
|
||||||
// tabs,
|
personalized,
|
||||||
// currentTab: tabs[0],
|
isBottom: false,
|
||||||
trendingCards: [],
|
trendingTitle: personalized ? '推荐' : '热门',
|
||||||
|
trendingCards: [] as VideoCardInfo[],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// watch: {
|
|
||||||
// currentTab(tab: Tab) {
|
|
||||||
// this.updateTrendingTab(tab)
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
methods: {
|
methods: {
|
||||||
// async updateTrendingTab(tab: Tab) {
|
async refreshCards() {
|
||||||
// const { getTrendingVideos } = await import('../trending-videos')
|
const { getTrendingVideos } = await import('../trending-videos')
|
||||||
// this.trendingCards = await getTrendingVideos(tab.day)
|
this.trendingCards = await getTrendingVideos()
|
||||||
// },
|
},
|
||||||
// changeTab(tab: Tab) {
|
|
||||||
// if (this.currentTab === tab) {
|
|
||||||
// open(tab.url, '_blank')
|
|
||||||
// } else {
|
|
||||||
// this.currentTab = tab
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
scroll(orientation: number) {
|
scroll(orientation: number) {
|
||||||
const contents = this.$refs.contents as HTMLElement
|
const contents = this.$refs.contents as HTMLElement
|
||||||
const style = getComputedStyle(contents)
|
const style = getComputedStyle(contents)
|
||||||
@ -92,11 +63,14 @@ export default {
|
|||||||
const gap = 16
|
const gap = 16
|
||||||
const distance = count * (width + gap)
|
const distance = count * (width + gap)
|
||||||
contents.scrollBy(orientation * distance, 0)
|
contents.scrollBy(orientation * distance, 0)
|
||||||
}
|
},
|
||||||
|
checkScrollPosition: _.debounce(function checkScrollPosition(e: Event) {
|
||||||
|
const element = e.target as HTMLElement
|
||||||
|
this.isBottom = element.scrollWidth - element.scrollLeft === element.clientWidth
|
||||||
|
}, 200),
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
const { getTrendingVideos } = await import('../trending-videos')
|
await this.refreshCards()
|
||||||
this.trendingCards = await getTrendingVideos()
|
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
let cancelHorizontalScroll: () => void
|
let cancelHorizontalScroll: () => void
|
||||||
@ -123,7 +97,8 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.simple-home .trendings {
|
.simple-home {
|
||||||
|
.trendings {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
.header {
|
.header {
|
||||||
@ -150,12 +125,19 @@ export default {
|
|||||||
.next-page .be-icon {
|
.next-page .be-icon {
|
||||||
transform: translateX(1px);
|
transform: translateX(1px);
|
||||||
}
|
}
|
||||||
|
.refresh .be-icon {
|
||||||
|
transition-duration: .5s;
|
||||||
|
transform: scale(0.9);
|
||||||
|
}
|
||||||
|
.refresh:hover .be-icon {
|
||||||
|
transform: scale(0.9) rotate(360deg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.contents {
|
.contents {
|
||||||
--card-width: 200px;
|
--card-width: 200px;
|
||||||
--card-height: 250px;
|
--card-height: 250px;
|
||||||
--card-count: 3;
|
--card-count: 4;
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
@ -165,22 +147,22 @@ export default {
|
|||||||
|
|
||||||
@media screen and (max-width: 1300px) and (min-width: 900px) {
|
@media screen and (max-width: 1300px) and (min-width: 900px) {
|
||||||
& {
|
& {
|
||||||
--card-count: 2;
|
--card-count: 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media screen and (max-width: 1100px) and (min-width: 900px) {
|
@media screen and (max-width: 1100px) and (min-width: 900px) {
|
||||||
& {
|
& {
|
||||||
--card-count: 4;
|
--card-count: 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media screen and (min-width: 1550px) {
|
@media screen and (min-width: 1550px) {
|
||||||
& {
|
& {
|
||||||
--card-count: 4;
|
--card-count: 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media screen and (min-width: 1850px) {
|
@media screen and (min-width: 1850px) {
|
||||||
& {
|
& {
|
||||||
--card-count: 5;
|
--card-count: 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
@ -193,5 +175,6 @@ export default {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -4,7 +4,9 @@
|
|||||||
#app > .bili-wrapper,
|
#app > .bili-wrapper,
|
||||||
#app > .elevator-module,
|
#app > .elevator-module,
|
||||||
#app > .bili-header-m.stardust-common > .bili-wrapper,
|
#app > .bili-header-m.stardust-common > .bili-wrapper,
|
||||||
.bili-header-m .head-banner .head-content .head-logo {
|
.bili-header-m .head-banner .head-content .head-logo,
|
||||||
|
#i_cecream .bili-header__channel,
|
||||||
|
#i_cecream > :not(.bili-header) {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
top: 100vh;
|
top: 100vh;
|
||||||
|
|||||||
@ -21,16 +21,17 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.simplify-home {
|
.simplify-home {
|
||||||
padding-top: 32px;
|
padding: 32px 72px 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background-color: #f4f4f4;
|
--simplify-home-background: #f4f4f4;
|
||||||
|
background-color: var(--simplify-home-background);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
|
||||||
body.dark & {
|
body.dark & {
|
||||||
background-color: #181818;
|
--simplify-home-background: #181818;
|
||||||
}
|
}
|
||||||
.simplify-home-component {
|
.simplify-home-component {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
|||||||
@ -2,86 +2,34 @@ import { VideoCardInfo } from './video-card-info'
|
|||||||
|
|
||||||
export const getTrendingVideos = async () => {
|
export const getTrendingVideos = async () => {
|
||||||
const { isVideoCardBlocked } = await import('../../activity/feeds-apis')
|
const { isVideoCardBlocked } = await import('../../activity/feeds-apis')
|
||||||
// const json = await Ajax.getJsonWithCredentials(
|
const api = 'https://api.bilibili.com/x/web-interface/index/top/rcmd?fresh_type=0&version=1'
|
||||||
// `https://api.bilibili.com/x/web-interface/ranking/index?day=${days}`
|
const personalized = Boolean(getUID()) && settings.simpleHomePersonalized
|
||||||
// )
|
const requestMethod: keyof typeof Ajax = personalized ? 'getJsonWithCredentials' : 'getJson'
|
||||||
// if (getUID() && watchlaterList === undefined) {
|
const { code, message, data } = await Ajax[requestMethod](api)
|
||||||
// const { getWatchlaterList } = await import(
|
if (code !== 0) {
|
||||||
// '../../video/watchlater-api'
|
throw new Error(`获取${personalized ? '推荐' : '热门'}视频失败: ${message}`)
|
||||||
// )
|
|
||||||
// watchlaterList = await getWatchlaterList()
|
|
||||||
// }
|
|
||||||
// if (json.code !== 0) {
|
|
||||||
// throw new Error(json.message)
|
|
||||||
// }
|
|
||||||
// return json.data.map(
|
|
||||||
// (card: any) => ({
|
|
||||||
// id: card.aid + '-' + days,
|
|
||||||
// aid: parseInt(card.aid),
|
|
||||||
// title: card.title,
|
|
||||||
// upID: card.mid,
|
|
||||||
// upName: card.author,
|
|
||||||
// coverUrl: card.pic.replace('http://', 'https://'),
|
|
||||||
// description: card.description,
|
|
||||||
// durationText: card.duration,
|
|
||||||
// playCount: formatCount(card.play),
|
|
||||||
// coins: formatCount(card.coins),
|
|
||||||
// favorites: formatCount(card.favorites),
|
|
||||||
// watchlater: true,
|
|
||||||
// // watchlater: watchlaterList ? watchlaterList.includes(parseInt(card.aid)) : null
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
if (!unsafeWindow.__INITIAL_STATE__) {
|
|
||||||
throw new Error('unsafeWindow.__INITIAL_STATE__ not available')
|
|
||||||
}
|
}
|
||||||
if (unsafeWindow.__INITIAL_STATE__.recommendData) {
|
const list: any[] = data.item
|
||||||
return (unsafeWindow.__INITIAL_STATE__.recommendData.item as any[]).map(
|
return list.map(it => {
|
||||||
it => {
|
const card: VideoCardInfo = {
|
||||||
return {
|
|
||||||
id: it.id,
|
id: it.id,
|
||||||
aid: it.id,
|
aid: it.id,
|
||||||
bvid: it.bvid,
|
bvid: it.bvid,
|
||||||
// timestamp: it.ctime * 1000,
|
|
||||||
// time: new Date(it.ctime * 1000),
|
|
||||||
description: it.desc,
|
|
||||||
duration: it.duration,
|
|
||||||
durationText: formatDuration(it.duration),
|
|
||||||
coverUrl: it.pic.replace('http:', 'https:'),
|
coverUrl: it.pic.replace('http:', 'https:'),
|
||||||
title: it.title,
|
title: it.title,
|
||||||
// coins: formatCount(it.stat.coin),
|
description: '',
|
||||||
// danmakuCount: formatCount(it.stat.danmaku),
|
duration: it.duration,
|
||||||
// favorites: formatCount(it.stat.favorite),
|
durationText: formatDuration(it.duration),
|
||||||
// like: formatCount(it.stat.like),
|
timestamp: it.pubdate * 1000,
|
||||||
playCount: formatCount(it.stat.view),
|
time: new Date(it.pubdate * 1000),
|
||||||
upName: it.owner.name,
|
upName: it.owner.name,
|
||||||
|
upID: it.owner.mid,
|
||||||
upFaceUrl: it.owner.face.replace('http:', 'https:'),
|
upFaceUrl: it.owner.face.replace('http:', 'https:'),
|
||||||
} as VideoCardInfo
|
|
||||||
},
|
|
||||||
).filter(it => !isVideoCardBlocked(it))
|
|
||||||
}
|
|
||||||
return (unsafeWindow.__INITIAL_STATE__.recommendList as any[]).map(
|
|
||||||
it => {
|
|
||||||
return {
|
|
||||||
id: it.aid,
|
|
||||||
aid: it.aid,
|
|
||||||
bvid: it.bvid,
|
|
||||||
timestamp: it.ctime * 1000,
|
|
||||||
time: new Date(it.ctime * 1000),
|
|
||||||
description: it.desc,
|
|
||||||
duration: it.duration,
|
|
||||||
durationText: formatDuration(it.duration),
|
|
||||||
coverUrl: it.pic.replace('http:', 'https:'),
|
|
||||||
title: it.title,
|
|
||||||
coins: formatCount(it.stat.coin),
|
|
||||||
danmakuCount: formatCount(it.stat.danmaku),
|
|
||||||
// favorites: formatCount(it.stat.favorite),
|
|
||||||
like: formatCount(it.stat.like),
|
like: formatCount(it.stat.like),
|
||||||
playCount: formatCount(it.stat.view),
|
playCount: formatCount(it.stat.view),
|
||||||
upName: it.owner.name,
|
}
|
||||||
upFaceUrl: it.owner.face.replace('http:', 'https:'),
|
return card
|
||||||
} as VideoCardInfo
|
}).filter(card => !isVideoCardBlocked(card))
|
||||||
},
|
|
||||||
).filter(it => !isVideoCardBlocked(it))
|
|
||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
export: {
|
export: {
|
||||||
|
|||||||
@ -39,23 +39,23 @@
|
|||||||
<div class="name" :title="upName">{{upName}}</div>
|
<div class="name" :title="upName">{{upName}}</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="stats">
|
<div class="stats">
|
||||||
<template v-if="like && !vertical">
|
<Icon type="extended" icon="play"></Icon>
|
||||||
<Icon type="extended" icon="like-outline"></Icon>
|
<span>{{playCount}}</span>
|
||||||
{{like}}
|
<template v-if="danmakuCount">
|
||||||
|
<Icon type="extended" icon="danmaku"></Icon>
|
||||||
|
<span>{{danmakuCount}}</span>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="coins && !vertical">
|
<template v-if="like">
|
||||||
|
<Icon type="extended" icon="like-outline"></Icon>
|
||||||
|
<span>{{like}}</span>
|
||||||
|
</template>
|
||||||
|
<template v-if="coins">
|
||||||
<Icon type="home" icon="coin-outline"></Icon>
|
<Icon type="home" icon="coin-outline"></Icon>
|
||||||
{{coins}}
|
<span>{{coins}}</span>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="favorites">
|
<template v-if="favorites">
|
||||||
<Icon type="home" icon="favorites-outline"></Icon>
|
<Icon type="home" icon="favorites-outline"></Icon>
|
||||||
{{favorites}}
|
<span>{{favorites}}</span>
|
||||||
</template>
|
|
||||||
<Icon type="extended" icon="play"></Icon>
|
|
||||||
{{playCount}}
|
|
||||||
<template v-if="danmakuCount">
|
|
||||||
<Icon type="extended" icon="danmaku"></Icon>
|
|
||||||
{{danmakuCount}}
|
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@ -176,6 +176,9 @@ export default {
|
|||||||
justify-self: start;
|
justify-self: start;
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
|
> :nth-child(n + 5) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
& > * {
|
& > * {
|
||||||
|
|||||||
@ -110,6 +110,7 @@
|
|||||||
<checkbox indent="0" key="simplifyHome" dependencies=""></checkbox>
|
<checkbox indent="0" key="simplifyHome" dependencies=""></checkbox>
|
||||||
<dropdown indent="1" key="simplifyHomeStyle" dependencies="simplifyHome"></dropdown>
|
<dropdown indent="1" key="simplifyHomeStyle" dependencies="simplifyHome"></dropdown>
|
||||||
<checkbox indent="1" key="simpleHomeWheelScroll" dependencies="simplifyHome"></checkbox>
|
<checkbox indent="1" key="simpleHomeWheelScroll" dependencies="simplifyHome"></checkbox>
|
||||||
|
<checkbox indent="1" key="simpleHomePersonalized" dependencies="simplifyHome"></checkbox>
|
||||||
<checkbox indent="0" key="hideBanner" dependencies=""></checkbox>
|
<checkbox indent="0" key="hideBanner" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="playerShadow" dependencies=""></checkbox>
|
<checkbox indent="0" key="playerShadow" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="narrowDanmaku" dependencies=""></checkbox>
|
<checkbox indent="0" key="narrowDanmaku" dependencies=""></checkbox>
|
||||||
@ -129,9 +130,9 @@
|
|||||||
<checkbox indent="0" key="fullTweetsTitle" dependencies=""></checkbox>
|
<checkbox indent="0" key="fullTweetsTitle" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="fullActivityContent" dependencies=""></checkbox>
|
<checkbox indent="0" key="fullActivityContent" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="feedsFilter" dependencies=""></checkbox>
|
<checkbox indent="0" key="feedsFilter" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="feedsTranslate" dependencies=""></checkbox>
|
<!-- <checkbox indent="0" key="feedsTranslate" dependencies=""></checkbox>
|
||||||
<dropdown indent="1" key="feedsTranslateProvider" dependencies="feedsTranslate"></dropdown>
|
<dropdown indent="1" key="feedsTranslateProvider" dependencies="feedsTranslate"></dropdown>
|
||||||
<checkbox indent="1" key="commentsTranslate" dependencies="feedsTranslate"></checkbox>
|
<checkbox indent="1" key="commentsTranslate" dependencies="feedsTranslate"></checkbox> -->
|
||||||
<checkbox indent="0" key="fixedSidebars" dependencies=""></checkbox>
|
<checkbox indent="0" key="fixedSidebars" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="extendFeedsLive" dependencies=""></checkbox>
|
<checkbox indent="0" key="extendFeedsLive" dependencies=""></checkbox>
|
||||||
<checkbox indent="0" key="disableFeedsDetails" dependencies=""></checkbox>
|
<checkbox indent="0" key="disableFeedsDetails" dependencies=""></checkbox>
|
||||||
|
|||||||
@ -138,7 +138,16 @@ function checkOfflineData () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const preCheckCompatibility = () => {
|
const preCheckCompatibility = () => {
|
||||||
// empty
|
SpinQuery.select('meta[name=spm_prefix]').then(spm => {
|
||||||
|
if (spm) {
|
||||||
|
spm.remove()
|
||||||
|
SpinQuery.select(() => unsafeWindow.__spm_prefix).then(() => {
|
||||||
|
if (unsafeWindow.__spm_prefix) {
|
||||||
|
delete unsafeWindow.__spm_prefix
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
function checkCompatibility () {
|
function checkCompatibility () {
|
||||||
if (window.devicePixelRatio === 1) {
|
if (window.devicePixelRatio === 1) {
|
||||||
|
|||||||
@ -17,6 +17,9 @@
|
|||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
body.player-fullscreen-fix & {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.gui-settings,
|
.gui-settings,
|
||||||
.gui-settings-widgets {
|
.gui-settings-widgets {
|
||||||
|
|||||||
@ -209,6 +209,7 @@ export const toolTips = new Map<keyof BilibiliEvolvedSettings, string>([
|
|||||||
[`unfoldFeeds`, /*html*/`自动展开被折叠的动态.`],
|
[`unfoldFeeds`, /*html*/`自动展开被折叠的动态.`],
|
||||||
[`commentsTranslate`, /*html*/`为评论也添加翻译按钮.`],
|
[`commentsTranslate`, /*html*/`为评论也添加翻译按钮.`],
|
||||||
[`simpleHomeWheelScroll`, /*html*/`在横向的卡片列表中, 允许鼠标滚轮上下滚动时变成对此列表的横向滚动. (因为是模拟的, 可能会有点卡顿)`],
|
[`simpleHomeWheelScroll`, /*html*/`在横向的卡片列表中, 允许鼠标滚轮上下滚动时变成对此列表的横向滚动. (因为是模拟的, 可能会有点卡顿)`],
|
||||||
|
[`simpleHomePersonalized`, /*html*/`是否允许展示个性化推荐视频, 关闭后则展示热门视频.`],
|
||||||
[`downloadPackageEmitMode`, /*html*/`选择多个文件下载时的行为, 打包会先打成一个 zip 再下载, 分别下载会对每一个文件触发下载.`],
|
[`downloadPackageEmitMode`, /*html*/`选择多个文件下载时的行为, 打包会先打成一个 zip 再下载, 分别下载会对每一个文件触发下载.`],
|
||||||
[`columnImageExporter`, /*html*/`在专栏页面中可在附加功能中导出所有图片.`],
|
[`columnImageExporter`, /*html*/`在专栏页面中可在附加功能中导出所有图片.`],
|
||||||
[`feedsImageExporter`, /*html*/`在动态的右上角菜单中可选择导出图片来下载当前动态里的所有图片.`],
|
[`feedsImageExporter`, /*html*/`在动态的右上角菜单中可选择导出图片来下载当前动态里的所有图片.`],
|
||||||
|
|||||||
@ -40,6 +40,10 @@
|
|||||||
white-space: nowrap !important;
|
white-space: nowrap !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.header-login-entry span {
|
||||||
|
white-space: nowrap !important;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
.live-sidebar-ctnr .sidebar-btn,
|
.live-sidebar-ctnr .sidebar-btn,
|
||||||
.up-info .up-focus-btn,
|
.up-info .up-focus-btn,
|
||||||
.attention-btn-ctnr .left-part,
|
.attention-btn-ctnr .left-part,
|
||||||
|
|||||||
@ -69,6 +69,15 @@ async function checkNewVersion () {
|
|||||||
latestVersionText = await Ajax.monkey({ url: Resource.cdnRoot || Resource.root + 'version.txt' })
|
latestVersionText = await Ajax.monkey({ url: Resource.cdnRoot || Resource.root + 'version.txt' })
|
||||||
}
|
}
|
||||||
const latestVersion = new Version(latestVersionText)
|
const latestVersion = new Version(latestVersionText)
|
||||||
|
if (latestVersion.parts[0] >= 2 && !settings.noNotifyV2) {
|
||||||
|
const message = /* html */`新版本<span>${latestVersion.versionString}</span>已发布, 请前往项目的<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">更新日志</a>或者<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/discussions">讨论区</a>了解如何安装和使用. <a class="link" href="javascript:void(0)" id="no-notify-v2">不再提示</a>`
|
||||||
|
const toast = Toast.info(message, '检查更新')
|
||||||
|
SpinQuery.select('#no-notify-v2').then(span => span.addEventListener('click', () => {
|
||||||
|
settings.noNotifyV2 = true
|
||||||
|
toast && toast.dismiss()
|
||||||
|
}))
|
||||||
|
return false
|
||||||
|
}
|
||||||
const currentVersion = new Version(settings.currentVersion)
|
const currentVersion = new Version(settings.currentVersion)
|
||||||
const hasNewVersion = latestVersion.greaterThan(currentVersion)
|
const hasNewVersion = latestVersion.greaterThan(currentVersion)
|
||||||
if (hasNewVersion) {
|
if (hasNewVersion) {
|
||||||
|
|||||||
@ -2,6 +2,9 @@ if (document.URL.replace(window.location.search, '') === 'https://www.bilibili.c
|
|||||||
// addSettingsListener('removeGameMatchModule', value => {
|
// addSettingsListener('removeGameMatchModule', value => {
|
||||||
// document.body.classList.toggle('remove-game-match-module', value)
|
// document.body.classList.toggle('remove-game-match-module', value)
|
||||||
// }, true)
|
// }, true)
|
||||||
|
SpinQuery.select('.eva-extension-area').then(it => {
|
||||||
|
it.parentElement.style.margin = '12px'
|
||||||
|
})
|
||||||
SpinQuery.any(
|
SpinQuery.any(
|
||||||
() => dqa('.gg-pic'),
|
() => dqa('.gg-pic'),
|
||||||
it => {
|
it => {
|
||||||
|
|||||||
@ -20,7 +20,10 @@ body:not(.preserve-event-banner) .activity-m,
|
|||||||
body.remove-game-match-module .bili-wrapper > .home-match,
|
body.remove-game-match-module .bili-wrapper > .home-match,
|
||||||
body.remove-game-match-module #reportFirst3,
|
body.remove-game-match-module #reportFirst3,
|
||||||
.home-content .ad-panel,
|
.home-content .ad-panel,
|
||||||
.recommend-list .rec-list > :not(.video-page-card) {
|
.recommend-list .rec-list > :not(.video-page-card),
|
||||||
|
.eva-extension-area,
|
||||||
|
.eva-banner
|
||||||
|
{
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
.recommend-list .rec-list > :not(.video-page-card) + .video-page-card {
|
.recommend-list .rec-list > :not(.video-page-card) + .video-page-card {
|
||||||
|
|||||||
@ -9,21 +9,23 @@ const playerModes = [
|
|||||||
{
|
{
|
||||||
name: '宽屏',
|
name: '宽屏',
|
||||||
action: async () => {
|
action: async () => {
|
||||||
document.querySelector('.bilibili-player-video-btn-widescreen').click()
|
const { playerAgent } = await import('./player-agent')
|
||||||
// document.querySelector("#bilibili-player").scrollIntoView({ behavior: "smooth" });
|
await playerAgent.widescreen()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '网页全屏',
|
name: '网页全屏',
|
||||||
action: () => {
|
action: async () => {
|
||||||
document.querySelector('.bilibili-player-video-web-fullscreen').click()
|
const { playerAgent } = await import('./player-agent')
|
||||||
|
await playerAgent.webFullscreen()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '全屏',
|
name: '全屏',
|
||||||
action: async () => {
|
action: async () => {
|
||||||
|
const { playerAgent } = await import('./player-agent')
|
||||||
const video = await SpinQuery.condition(
|
const video = await SpinQuery.condition(
|
||||||
() => document.querySelector('.bilibili-player-video video'),
|
() => document.querySelector(playerAgent.query.video.element.selector),
|
||||||
it => {
|
it => {
|
||||||
return it !== null && it.readyState === 4 &&
|
return it !== null && it.readyState === 4 &&
|
||||||
document.readyState === 'complete' && document.hasFocus()
|
document.readyState === 'complete' && document.hasFocus()
|
||||||
@ -32,16 +34,17 @@ const playerModes = [
|
|||||||
console.warn('[默认播放器模式] 未能应用全屏模式, 等待超时.')
|
console.warn('[默认播放器模式] 未能应用全屏模式, 等待超时.')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
document.querySelector('.bilibili-player-video-btn-fullscreen').click()
|
await playerAgent.fullscreen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
let lightOff = () => { }
|
let lightOff = () => { }
|
||||||
let lightOn = () => { }
|
let lightOn = () => { }
|
||||||
async function initLights () {
|
async function initLights () {
|
||||||
|
const { playerAgent } = await import('./player-agent')
|
||||||
if (settings.autoLightOff) {
|
if (settings.autoLightOff) {
|
||||||
await SpinQuery.unsafeJquery()
|
await SpinQuery.unsafeJquery()
|
||||||
const settingsButton = await SpinQuery.any(() => unsafeWindow.$('.bilibili-player-video-btn-setting'))
|
const settingsButton = await playerAgent.query.control.buttons.settings()
|
||||||
if (!settingsButton) {
|
if (!settingsButton) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -59,37 +62,20 @@ async function initLights () {
|
|||||||
}
|
}
|
||||||
async function main () {
|
async function main () {
|
||||||
await initLights()
|
await initLights()
|
||||||
await SpinQuery.condition(
|
const { playerReady } = await import('./player-ready')
|
||||||
() => $('.bilibili-player-video,.bilibili-player-video-btn-start,.bilibili-player-area'),
|
const { playerAgent } = await import('./player-agent')
|
||||||
it => it.length === 3 && $('video').length > 0 && $('video').prop('duration'))
|
await playerReady()
|
||||||
|
|
||||||
const video = dq('video')
|
const video = await playerAgent.query.video.element()
|
||||||
if (!video) {
|
if (!video) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const info = playerModes.find(it => it.name === settings.defaultPlayerMode)
|
const info = playerModes.find(it => it.name === settings.defaultPlayerMode)
|
||||||
// if (info.name === "全屏")
|
const onplay = async () => {
|
||||||
// {
|
const container = await (playerAgent.query.bilibiliPlayer())
|
||||||
// const unsafe$ = await SpinQuery.unsafeJquery();
|
const attribute = container.getAttribute('data-screen')
|
||||||
// const playButton = document.querySelector(".bilibili-player-video-btn-start");
|
const isNormalMode = !container.className.includes('mode-') && (attribute === null || attribute === 'normal')
|
||||||
// const playerButtonClick = () =>
|
if (info && isNormalMode) {
|
||||||
// {
|
|
||||||
// const events = unsafe$(".bilibili-player-video-btn-fullscreen").data("events");
|
|
||||||
// if (events.click && events.click[0] && events.click[0].handler)
|
|
||||||
// {
|
|
||||||
// const handler = unsafe$(".bilibili-player-video-btn-fullscreen").data("events").click[0].handler;
|
|
||||||
// console.log(handler);
|
|
||||||
// handler();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// playButton.removeEventListener("click", playerButtonClick);
|
|
||||||
// };
|
|
||||||
// playButton.addEventListener("click", playerButtonClick);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
{
|
|
||||||
const onplay = () => {
|
|
||||||
if (info && $('#bilibiliPlayer[class*=mode-]').length === 0) {
|
|
||||||
info.action()
|
info.action()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,6 +97,5 @@ async function main () {
|
|||||||
video.addEventListener('ended', lightOn)
|
video.addEventListener('ended', lightOn)
|
||||||
video.addEventListener('pause', lightOn)
|
video.addEventListener('pause', lightOn)
|
||||||
video.addEventListener('play', lightOff)
|
video.addEventListener('play', lightOff)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Observer.videoChange(main)
|
Observer.videoChange(main)
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
color: white;
|
color: white;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
z-index: 100;
|
z-index: 150;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-size: 14pt;
|
font-size: 14pt;
|
||||||
|
|||||||
@ -10,37 +10,43 @@ const supportedUrls = [
|
|||||||
'https://www.bilibili.com/festival/2021bnj',
|
'https://www.bilibili.com/festival/2021bnj',
|
||||||
]
|
]
|
||||||
|
|
||||||
let config: { enable: boolean, bindings: KeyBinding[] } | undefined = undefined
|
let config: { enable: boolean, bindings: KeyBinding[] } | undefined = undefined;
|
||||||
if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
(async () => {
|
||||||
const clickElement = (target: string | HTMLElement) => {
|
if (!supportedUrls.some(url => document.URL.startsWith(url))) {
|
||||||
return ({ event }: KeyBindingActionContext) => {
|
return
|
||||||
|
}
|
||||||
|
const { playerAgent } = await import('../player-agent')
|
||||||
|
const clickElement = (target: string | HTMLElement | Promise<HTMLElement | null>) => {
|
||||||
|
return async ({ event }: KeyBindingActionContext) => {
|
||||||
const mouseEvent = new MouseEvent('click', {
|
const mouseEvent = new MouseEvent('click', {
|
||||||
..._.pick(event, 'ctrlKey', 'shiftKey', 'altKey', 'metaKey')
|
..._.pick(event, 'ctrlKey', 'shiftKey', 'altKey', 'metaKey')
|
||||||
})
|
})
|
||||||
if (typeof target === 'string') {
|
if (typeof target === 'string') {
|
||||||
(dq(target) as HTMLElement)?.dispatchEvent(mouseEvent)
|
(dq(target) as HTMLElement)?.dispatchEvent(mouseEvent)
|
||||||
} else {
|
} else {
|
||||||
target.dispatchEvent(mouseEvent)
|
const element = await target
|
||||||
|
element?.dispatchEvent(mouseEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const changeVideoTime = (delta: number) => {
|
const changeVideoTime = (delta: number) => {
|
||||||
return () => {
|
return async () => playerAgent.changeTime(delta)
|
||||||
const video = dq('.bilibili-player-video video') as HTMLVideoElement
|
// return async () => {
|
||||||
console.log(`[keymap] requested video time change, delta = ${delta}`)
|
// const video = await playerAgent.query.video.element() as HTMLVideoElement
|
||||||
if (!video) {
|
// console.log(`[keymap] requested video time change, delta = ${delta}`)
|
||||||
console.log('[keymap] video element not found')
|
// if (!video) {
|
||||||
return
|
// console.log('[keymap] video element not found')
|
||||||
}
|
// return
|
||||||
if (!unsafeWindow.player) {
|
// }
|
||||||
// fallback
|
// if (!unsafeWindow.player) {
|
||||||
console.log('[keymap] fallback')
|
// // fallback
|
||||||
video.currentTime += delta
|
// console.log('[keymap] fallback')
|
||||||
return
|
// video.currentTime += delta
|
||||||
}
|
// return
|
||||||
console.log('[keymap] player API seek')
|
// }
|
||||||
unsafeWindow.player.seek(video.currentTime + delta, video.paused)
|
// console.log('[keymap] player API seek')
|
||||||
}
|
// unsafeWindow.player.seek(video.currentTime + delta, video.paused)
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
/** 提示框用的`setTimeout`句柄 */
|
/** 提示框用的`setTimeout`句柄 */
|
||||||
let tipTimeoutHandle: number
|
let tipTimeoutHandle: number
|
||||||
@ -49,10 +55,10 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
* @param text 文字 (可以 HTML)
|
* @param text 文字 (可以 HTML)
|
||||||
* @param icon MDI 图标 class
|
* @param icon MDI 图标 class
|
||||||
*/
|
*/
|
||||||
const showTip = (text: string, icon: string) => {
|
const showTip = async (text: string, icon: string) => {
|
||||||
let tip = dq('.keymap-tip') as HTMLDivElement
|
let tip = dq('.keymap-tip') as HTMLDivElement
|
||||||
if (!tip) {
|
if (!tip) {
|
||||||
const player = dq('.bilibili-player-video-wrap')
|
const player = await playerAgent.query.playerArea() as HTMLElement
|
||||||
if (!player) {
|
if (!player) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -86,37 +92,34 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const actions = {
|
const actions = {
|
||||||
fullscreen: clickElement('.bilibili-player-video-btn-fullscreen'),
|
fullscreen: () => playerAgent.fullscreen(),
|
||||||
webFullscreen: clickElement('.bilibili-player-video-web-fullscreen'),
|
webFullscreen: () => playerAgent.webFullscreen(),
|
||||||
wideScreen: clickElement('.bilibili-player-video-btn-widescreen'),
|
wideScreen: () => playerAgent.widescreen(),
|
||||||
volumeUp: () => {
|
volumeUp: async () => {
|
||||||
const current = unsafeWindow.player.volume()
|
const volume = await playerAgent.changeVolume(10)
|
||||||
unsafeWindow.player.volume(current + 0.1)
|
showTip(`${volume}%`, 'mdi-volume-high')
|
||||||
showTip(`${Math.round(unsafeWindow.player.volume() * 100)}%`, 'mdi-volume-high')
|
|
||||||
},
|
},
|
||||||
volumeDown: () => {
|
volumeDown: async () => {
|
||||||
const current = unsafeWindow.player.volume()
|
const volume = await playerAgent.changeVolume(-10)
|
||||||
unsafeWindow.player.volume(current - 0.1)
|
if (volume === 0) {
|
||||||
const after = Math.round(unsafeWindow.player.volume() * 100)
|
|
||||||
if (after === 0) {
|
|
||||||
showTip('静音', 'mdi-volume-off')
|
showTip('静音', 'mdi-volume-off')
|
||||||
} else {
|
} else {
|
||||||
showTip(`${after}%`, 'mdi-volume-high')
|
showTip(`${volume}%`, 'mdi-volume-high')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mute: (context: KeyBindingActionContext) => {
|
mute: async () => {
|
||||||
clickElement('.bilibili-player-video-btn-volume .bilibili-player-iconfont-volume')(context)
|
await playerAgent.toggleMute()
|
||||||
const isMute = unsafeWindow.player.isMute()
|
const isMute = await playerAgent.isMute()
|
||||||
if (isMute) {
|
if (isMute) {
|
||||||
showTip('已静音', 'mdi-volume-off')
|
showTip('已静音', 'mdi-volume-off')
|
||||||
} else {
|
} else {
|
||||||
showTip('已取消静音', 'mdi-volume-high')
|
showTip('已取消静音', 'mdi-volume-high')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
pictureInPicture: clickElement('.bilibili-player-video-btn-pip'),
|
pictureInPicture: () => playerAgent.togglePip(),
|
||||||
coin: clickElement('.video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)'),
|
coin: clickElement('.video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)'),
|
||||||
favorite: clickElement('.video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)'),
|
favorite: clickElement('.video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)'),
|
||||||
pause: clickElement('.bilibili-player-video-btn-start'),
|
pause: () => playerAgent.togglePlay(),
|
||||||
like: (() => {
|
like: (() => {
|
||||||
/** 长按`L`三连使用的记忆变量 */
|
/** 长按`L`三连使用的记忆变量 */
|
||||||
let likeClick = true
|
let likeClick = true
|
||||||
@ -140,26 +143,21 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
}) as KeyBindingAction
|
}) as KeyBindingAction
|
||||||
})(),
|
})(),
|
||||||
danmaku: () => {
|
danmaku: () => {
|
||||||
const checkbox = dq('.bilibili-player-video-danmaku-switch input') as HTMLInputElement
|
playerAgent.toggleDanmaku()
|
||||||
if (!checkbox) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
checkbox.checked = !checkbox.checked
|
|
||||||
raiseEvent(checkbox, 'change')
|
|
||||||
},
|
},
|
||||||
longJumpBackward: changeVideoTime(-settings.keymapJumpSeconds),
|
longJumpBackward: changeVideoTime(-settings.keymapJumpSeconds),
|
||||||
longJumpForward: changeVideoTime(settings.keymapJumpSeconds),
|
longJumpForward: changeVideoTime(settings.keymapJumpSeconds),
|
||||||
jumpBackward: changeVideoTime(-5),
|
jumpBackward: changeVideoTime(-5),
|
||||||
jumpForward: changeVideoTime(5),
|
jumpForward: changeVideoTime(5),
|
||||||
playerMenu: () => {
|
playerMenu: async () => {
|
||||||
// menu size: 386.6 x 311 (2020-03-29)
|
// menu size: 386.6 x 311 (2020-03-29)
|
||||||
// menu size: 176.65 x 194 (2020-06-09)
|
// menu size: 176.65 x 194 (2020-06-09)
|
||||||
const player = dq('.bilibili-player-video-wrap') as HTMLElement
|
const container = await playerAgent.query.video.container() as HTMLElement
|
||||||
if (!player) {
|
if (!container) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const rect = player.getBoundingClientRect()
|
const rect = container.getBoundingClientRect()
|
||||||
player.dispatchEvent(new MouseEvent('contextmenu', {
|
container.dispatchEvent(new MouseEvent('contextmenu', {
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
cancelable: false,
|
cancelable: false,
|
||||||
view: unsafeWindow,
|
view: unsafeWindow,
|
||||||
@ -186,19 +184,7 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
takeScreenshot: clickElement('.video-take-screenshot'),
|
takeScreenshot: clickElement('.video-take-screenshot'),
|
||||||
previousFrame: clickElement('.prev-frame'),
|
previousFrame: clickElement('.prev-frame'),
|
||||||
nextFrame: clickElement('.next-frame'),
|
nextFrame: clickElement('.next-frame'),
|
||||||
seekBegin: () => {
|
seekBegin: () => playerAgent.seek(0),
|
||||||
if (!unsafeWindow.player) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
unsafeWindow.player.play()
|
|
||||||
setTimeout(() => {
|
|
||||||
unsafeWindow.player.seek(0)
|
|
||||||
const toastText = dq(".bilibili-player-video-toast-bottom .bilibili-player-video-toast-item:first-child .bilibili-player-video-toast-item-text span:nth-child(2)")
|
|
||||||
if (toastText) {
|
|
||||||
toastText.textContent = " 00:00"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
const defaultBindings: { [action in keyof typeof actions]: string } = {
|
const defaultBindings: { [action in keyof typeof actions]: string } = {
|
||||||
fullscreen: 'f',
|
fullscreen: 'f',
|
||||||
@ -234,12 +220,10 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
const keys = keyString.split(' ').filter(it => it !== '')
|
const keys = keyString.split(' ').filter(it => it !== '')
|
||||||
return {
|
return {
|
||||||
keys,
|
keys,
|
||||||
action: (actions as any)[actionName] || (() => {}),
|
action: (actions as any)[actionName] || (() => { }),
|
||||||
} as KeyBinding
|
} as KeyBinding
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
;(async () => {
|
|
||||||
const { loadKeyBindings } = await import('./key-bindings')
|
const { loadKeyBindings } = await import('./key-bindings')
|
||||||
const { presets } = await import('./key-binding-presets')
|
const { presets } = await import('./key-binding-presets')
|
||||||
addSettingsListener('keymapPreset', () => {
|
addSettingsListener('keymapPreset', () => {
|
||||||
@ -255,8 +239,7 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
|||||||
}
|
}
|
||||||
}, true)
|
}, true)
|
||||||
resources.applyImportantStyle('keymapStyle')
|
resources.applyImportantStyle('keymapStyle')
|
||||||
})()
|
})()
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
reload: () => config && (config.enable = true),
|
reload: () => config && (config.enable = true),
|
||||||
|
|||||||
295
src/video/player-agent.ts
Normal file
295
src/video/player-agent.ts
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
/** 元素查询函数, 调用时执行 `SpinQuery.select` 查询, 可访问 `selector` 获取选择器 */
|
||||||
|
type ElementQuery<Target = HTMLElement> = {
|
||||||
|
(): Promise<Target | null>
|
||||||
|
selector: string
|
||||||
|
}
|
||||||
|
interface CustomNestedQuery<QueryResult> {
|
||||||
|
[key: string]: QueryResult | CustomNestedQuery<QueryResult>
|
||||||
|
}
|
||||||
|
interface CustomQuery<QueryResult> extends CustomNestedQuery<QueryResult> {
|
||||||
|
[key: string]: QueryResult
|
||||||
|
}
|
||||||
|
type AgentType = 'video' | 'bwp' | 'bangumi'
|
||||||
|
type CustomQueryProvider<TargetType> = {
|
||||||
|
[key in AgentType]?: TargetType
|
||||||
|
} & { video: TargetType }
|
||||||
|
interface PlayerQuery<QueryResult> extends CustomNestedQuery<QueryResult> {
|
||||||
|
playerWrap: QueryResult
|
||||||
|
bilibiliPlayer: QueryResult
|
||||||
|
playerArea: QueryResult
|
||||||
|
video: {
|
||||||
|
element: QueryResult
|
||||||
|
wrap: QueryResult
|
||||||
|
top: QueryResult
|
||||||
|
state: QueryResult
|
||||||
|
panel: QueryResult
|
||||||
|
popup: QueryResult
|
||||||
|
subtitle: QueryResult
|
||||||
|
basDanmaku: QueryResult
|
||||||
|
advDanmaku: QueryResult
|
||||||
|
danmaku: QueryResult
|
||||||
|
container: QueryResult
|
||||||
|
}
|
||||||
|
control: {
|
||||||
|
element: QueryResult
|
||||||
|
wrap: QueryResult
|
||||||
|
mask: QueryResult
|
||||||
|
top: QueryResult
|
||||||
|
progress: QueryResult
|
||||||
|
bottom: QueryResult
|
||||||
|
bottomLeft: QueryResult
|
||||||
|
bottomCenter: QueryResult
|
||||||
|
bottomRight: QueryResult
|
||||||
|
buttons: {
|
||||||
|
start: QueryResult
|
||||||
|
next: QueryResult
|
||||||
|
time: QueryResult
|
||||||
|
quality: QueryResult
|
||||||
|
pageList: QueryResult
|
||||||
|
speed: QueryResult
|
||||||
|
subtitle: QueryResult
|
||||||
|
volume: QueryResult
|
||||||
|
settings: QueryResult
|
||||||
|
pip: QueryResult
|
||||||
|
widescreen: QueryResult
|
||||||
|
webFullscreen: QueryResult
|
||||||
|
fullscreen: QueryResult
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toastWrap: QueryResult
|
||||||
|
danmakuTipLayer: QueryResult
|
||||||
|
danmakuSwitch: QueryResult
|
||||||
|
}
|
||||||
|
const select = (selector: string): ElementQuery => {
|
||||||
|
const func = () => SpinQuery.select(selector)
|
||||||
|
func.selector = selector
|
||||||
|
return func
|
||||||
|
}
|
||||||
|
const selectorWrap = (query: CustomNestedQuery<string>): CustomNestedQuery<ElementQuery> => {
|
||||||
|
const map = (value: string | Record<string, any>): ElementQuery | Record<string, any> => {
|
||||||
|
if (typeof value !== 'string') {
|
||||||
|
return _.mapValues(value, map)
|
||||||
|
}
|
||||||
|
return select(value)
|
||||||
|
}
|
||||||
|
return _.mapValues(query, map) as CustomNestedQuery<ElementQuery>
|
||||||
|
}
|
||||||
|
export abstract class PlayerAgent {
|
||||||
|
abstract type: AgentType
|
||||||
|
abstract query: PlayerQuery<ElementQuery>
|
||||||
|
protected async click(target: () => Promise<HTMLElement | null>) {
|
||||||
|
const button = await target()
|
||||||
|
button?.click()
|
||||||
|
}
|
||||||
|
provideCustomQuery<CustomQueryType extends CustomQuery<string>>(config: CustomQueryProvider<CustomQueryType>) {
|
||||||
|
const custom = selectorWrap(config[this.type] ?? config.video) as CustomQuery<ElementQuery>
|
||||||
|
return { ...this, custom } as (this & { custom: { [key in keyof CustomQueryType]: ElementQuery } })
|
||||||
|
}
|
||||||
|
async widescreen() {
|
||||||
|
await this.click(this.query.control.buttons.widescreen)
|
||||||
|
}
|
||||||
|
async webFullscreen() {
|
||||||
|
await this.click(this.query.control.buttons.webFullscreen)
|
||||||
|
}
|
||||||
|
async fullscreen() {
|
||||||
|
await this.click(this.query.control.buttons.fullscreen)
|
||||||
|
}
|
||||||
|
async togglePlay() {
|
||||||
|
await this.click(this.query.control.buttons.start)
|
||||||
|
}
|
||||||
|
async togglePip() {
|
||||||
|
await this.click(this.query.control.buttons.pip)
|
||||||
|
}
|
||||||
|
async toggleMute() {
|
||||||
|
await this.click(this.query.control.buttons.volume)
|
||||||
|
}
|
||||||
|
async toggleDanmaku() {
|
||||||
|
const checkbox = await this.query.danmakuSwitch() as HTMLInputElement
|
||||||
|
if (!checkbox) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
checkbox.checked = !checkbox.checked
|
||||||
|
raiseEvent(checkbox, 'change')
|
||||||
|
}
|
||||||
|
abstract isMute(): Promise<boolean>
|
||||||
|
/** 更改音量 (%) */
|
||||||
|
abstract changeVolume(change: number): Promise<number>
|
||||||
|
/** 跳转到指定时间 */
|
||||||
|
abstract seek(time: number): Promise<number>
|
||||||
|
/** 更改时间 */
|
||||||
|
abstract changeTime(change: number): Promise<number>
|
||||||
|
}
|
||||||
|
export class VideoPlayerAgent extends PlayerAgent {
|
||||||
|
type: AgentType = 'video'
|
||||||
|
get nativeApi() { return unsafeWindow.player }
|
||||||
|
query = selectorWrap({
|
||||||
|
playerWrap: '.player-wrap',
|
||||||
|
bilibiliPlayer: '.bilibili-player',
|
||||||
|
playerArea: '.bilibili-player-area',
|
||||||
|
video: {
|
||||||
|
element: 'video',
|
||||||
|
wrap: '.bilibili-player-video-wrap',
|
||||||
|
top: '.bilibili-player-top',
|
||||||
|
state: '.bilibili-player-state',
|
||||||
|
panel: '.bilibili-player-video-panel',
|
||||||
|
popup: '.bilibili-player-video-popup',
|
||||||
|
subtitle: '.bilibili-player-video-subtitle',
|
||||||
|
basDanmaku: '.bilibili-player-bas-danmaku',
|
||||||
|
advDanmaku: '.bilibili-player-adv-danmaku',
|
||||||
|
danmaku: '.bilibili-player-danmaku',
|
||||||
|
container: '.bilibili-player-video',
|
||||||
|
},
|
||||||
|
control: {
|
||||||
|
element: '.bilibili-player-control',
|
||||||
|
wrap: '.bilibili-player-control-wrap',
|
||||||
|
mask: '.bilibili-player-control-mask',
|
||||||
|
top: '.bilibili-player-control-top',
|
||||||
|
progress: '.bilibili-player-video-progress',
|
||||||
|
bottom: '.bilibili-player-control-bottom',
|
||||||
|
bottomLeft: '.bilibili-player-control-bottom-left',
|
||||||
|
bottomCenter: '.bilibili-player-control-bottom-center',
|
||||||
|
bottomRight: '.bilibili-player-control-bottom-right',
|
||||||
|
buttons: {
|
||||||
|
start: '.bilibili-player-video-btn-start',
|
||||||
|
next: '.bilibili-player-video-btn-next',
|
||||||
|
time: '.bilibili-player-video-time',
|
||||||
|
quality: '.bilibili-player-btn-quality',
|
||||||
|
pageList: '.bilibili-player-video-btn-pagelist',
|
||||||
|
speed: '.bilibili-player-video-btn-speed',
|
||||||
|
subtitle: '.bilibili-player-video-btn-subtitle',
|
||||||
|
volume: '.bilibili-player-video-btn-volume .bilibili-player-iconfont-volume',
|
||||||
|
settings: '.bilibili-player-video-btn-setting',
|
||||||
|
pip: '.bilibili-player-video-btn-pip',
|
||||||
|
widescreen: '.bilibili-player-video-btn-widescreen',
|
||||||
|
webFullscreen: '.bilibili-player-video-web-fullscreen',
|
||||||
|
fullscreen: '.bilibili-player-video-btn-fullscreen',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toastWrap: '.bilibili-player-video-toast-wrp',
|
||||||
|
danmakuTipLayer: '.bilibili-player-dm-tip-wrap',
|
||||||
|
danmakuSwitch: '.bilibili-player-video-danmaku-switch input',
|
||||||
|
}) as PlayerQuery<ElementQuery>
|
||||||
|
async isMute() {
|
||||||
|
return this.nativeApi.isMute()
|
||||||
|
}
|
||||||
|
async changeVolume(change: number) {
|
||||||
|
const current = this.nativeApi.volume()
|
||||||
|
this.nativeApi.volume(current + change / 100)
|
||||||
|
return Math.round(this.nativeApi.volume() * 100)
|
||||||
|
}
|
||||||
|
async seek(time: number) {
|
||||||
|
this.nativeApi.play()
|
||||||
|
setTimeout(() => {
|
||||||
|
this.nativeApi.seek(time)
|
||||||
|
const toastText = dq(".bilibili-player-video-toast-bottom .bilibili-player-video-toast-item:first-child .bilibili-player-video-toast-item-text span:nth-child(2)")
|
||||||
|
if (toastText) {
|
||||||
|
toastText.textContent = " 00:00"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return this.nativeApi.getCurrentTime()
|
||||||
|
}
|
||||||
|
async changeTime(change: number) {
|
||||||
|
const video = await this.query.video.element() as HTMLVideoElement
|
||||||
|
this.nativeApi.seek(video.currentTime + change, video.paused)
|
||||||
|
return this.nativeApi.getCurrentTime()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class BwpPlayerAgent extends VideoPlayerAgent {
|
||||||
|
type: AgentType = 'bwp'
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
this.query.video.element = select('bwp-video')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class BangumiPlayerAgent extends PlayerAgent {
|
||||||
|
type: AgentType = 'bangumi'
|
||||||
|
query = selectorWrap({
|
||||||
|
playerWrap: '.player-module',
|
||||||
|
bilibiliPlayer: '.bpx-player-container',
|
||||||
|
playerArea: '.bpx-player-primary-area',
|
||||||
|
video: {
|
||||||
|
element: 'video',
|
||||||
|
wrap: '.bpx-player-video-area',
|
||||||
|
top: '.bpx-player-top-wrap',
|
||||||
|
state: '.bpx-player-state-wrap',
|
||||||
|
panel: '.bpx-player-ending-panel',
|
||||||
|
popup: '.bpx-player-dialog-wrap',
|
||||||
|
subtitle: '.bpx-player-subtitle-wrap',
|
||||||
|
basDanmaku: '.bpx-player-bas-dm-wrap',
|
||||||
|
advDanmaku: '.bpx-player-adv-dm-wrap',
|
||||||
|
danmaku: '.bpx-player-row-dm-wrap',
|
||||||
|
container: '.bpx-player-video-wrap',
|
||||||
|
},
|
||||||
|
control: {
|
||||||
|
element: '.squirtle-controller',
|
||||||
|
wrap: '.bpx-player-control-wrap',
|
||||||
|
mask: '.bpx-player-control-mask',
|
||||||
|
top: '.bpx-player-control-top',
|
||||||
|
progress: '.squirtle-progress-wrap',
|
||||||
|
bottom: '.squirtle-controller-wrap',
|
||||||
|
bottomLeft: '.squirtle-controller-wrap-left',
|
||||||
|
bottomCenter: '.squirtle-controller-wrap-center',
|
||||||
|
bottomRight: '.squirtle-controller-wrap-right',
|
||||||
|
buttons: {
|
||||||
|
start: '.squirtle-video-start',
|
||||||
|
next: '.squirtle-video-next',
|
||||||
|
time: '.squirtle-video-time',
|
||||||
|
quality: '.squirtle-video-quality',
|
||||||
|
pageList: '.squirtle-video-pagelist',
|
||||||
|
speed: '.squirtle-video-speed',
|
||||||
|
subtitle: '.squirtle-video-subtitle',
|
||||||
|
volume: '.squirtle-video-volume .squirtle-volume-icon',
|
||||||
|
settings: '.squirtle-video-setting',
|
||||||
|
pip: '.squirtle-video-pip',
|
||||||
|
widescreen: '.squirtle-video-widescreen',
|
||||||
|
webFullscreen: '.squirtle-video-pagefullscreen',
|
||||||
|
fullscreen: '.squirtle-video-fullscreen',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toastWrap: '.bpx-player-tooltip-area',
|
||||||
|
danmakuTipLayer: '.bpx-player-dialog-wrap',
|
||||||
|
danmakuSwitch: '.bpx-player-dm-switch input',
|
||||||
|
}) as PlayerQuery<ElementQuery>
|
||||||
|
async isMute() {
|
||||||
|
const icon = await this.query.control.buttons.volume() as HTMLElement
|
||||||
|
return icon?.classList.contains('squirtle-volume-mute-state') ?? false
|
||||||
|
}
|
||||||
|
async changeVolume(change: number) {
|
||||||
|
const video = await this.query.video.element() as HTMLVideoElement
|
||||||
|
video.volume = _.clamp(video.volume + change / 100, 0, 1)
|
||||||
|
return Math.round(video.volume * 100)
|
||||||
|
}
|
||||||
|
async seek(time: number) {
|
||||||
|
const video = await this.query.video.element() as HTMLVideoElement
|
||||||
|
video.play()
|
||||||
|
setTimeout(() => {
|
||||||
|
video.currentTime = _.clamp(time, 0, video.duration)
|
||||||
|
const toastText = dq('.bpx-player-toast-row .bpx-player-toast-item .bpx-player-toast-text')
|
||||||
|
if (toastText?.textContent?.startsWith('已为您定位至')) {
|
||||||
|
toastText.textContent = '已为您定位至00:00'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return video.currentTime
|
||||||
|
}
|
||||||
|
async changeTime(change: number) {
|
||||||
|
const video = await this.query.video.element() as HTMLVideoElement
|
||||||
|
video.currentTime = _.clamp(video.currentTime + change, 0, video.duration)
|
||||||
|
return video.currentTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const playerAgent = (() => {
|
||||||
|
if (document.URL.includes('//www.bilibili.com/bangumi/play')) {
|
||||||
|
return new BangumiPlayerAgent()
|
||||||
|
}
|
||||||
|
if (unsafeWindow.__ENABLE_WASM_PLAYER__) {
|
||||||
|
return new BwpPlayerAgent()
|
||||||
|
}
|
||||||
|
return new VideoPlayerAgent()
|
||||||
|
})()
|
||||||
|
|
||||||
|
export default {
|
||||||
|
export: {
|
||||||
|
playerAgent,
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,8 +12,10 @@ const entry = () => {
|
|||||||
}
|
}
|
||||||
resources.applyStyle(styleID)
|
resources.applyStyle(styleID)
|
||||||
const removeCover = () => document.body.style.removeProperty('--cover-url')
|
const removeCover = () => document.body.style.removeProperty('--cover-url')
|
||||||
const originalPlay = HTMLVideoElement.prototype.play
|
const isBwpVideo = unsafeWindow.__ENABLE_WASM_PLAYER__ || dq('bwp-video')
|
||||||
HTMLVideoElement.prototype.play = function (...args: any[]) {
|
const proto = isBwpVideo ? BwpElement.prototype : HTMLVideoElement.prototype
|
||||||
|
const originalPlay = proto.play
|
||||||
|
proto.play = function (...args: any[]) {
|
||||||
removeCover()
|
removeCover()
|
||||||
return originalPlay.call(this, ...args)
|
return originalPlay.call(this, ...args)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
export class VideoSpeedController {
|
export class VideoSpeedController {
|
||||||
static readonly classNameMap = {
|
static classNameMap = {
|
||||||
speedMenuList: "bilibili-player-video-btn-speed-menu",
|
speedMenuList: "bilibili-player-video-btn-speed-menu",
|
||||||
speedMenuItem: "bilibili-player-video-btn-speed-menu-list",
|
speedMenuItem: "bilibili-player-video-btn-speed-menu-list",
|
||||||
speedNameBtn: "bilibili-player-video-btn-speed-name",
|
speedNameBtn: "bilibili-player-video-btn-speed-name",
|
||||||
@ -106,7 +106,7 @@ export class VideoSpeedController {
|
|||||||
return new VideoSpeedController(containerElement, videoElement, previousSpeed, nativeSpeed)
|
return new VideoSpeedController(containerElement, videoElement, previousSpeed, nativeSpeed)
|
||||||
}
|
}
|
||||||
|
|
||||||
static init = _.once(() => {
|
static init = _.once(async () => {
|
||||||
// 分 P 切换时共享同一个倍数,这里指定初始倍数可以是 undefined,不需要是 1
|
// 分 P 切换时共享同一个倍数,这里指定初始倍数可以是 undefined,不需要是 1
|
||||||
let sharedSpeed: number | undefined = undefined
|
let sharedSpeed: number | undefined = undefined
|
||||||
// 分 P 切换时共享同一个原生倍速值,初始值设置为 1
|
// 分 P 切换时共享同一个原生倍速值,初始值设置为 1
|
||||||
@ -114,6 +114,37 @@ export class VideoSpeedController {
|
|||||||
// 持有菜单容器元素的引用,videoChange 时更换(以前缓存的 VideoController 就没有意义了)
|
// 持有菜单容器元素的引用,videoChange 时更换(以前缓存的 VideoController 就没有意义了)
|
||||||
let containerElement: HTMLElement
|
let containerElement: HTMLElement
|
||||||
|
|
||||||
|
const { playerAgent } = await import('../player-agent')
|
||||||
|
const extendedAgent = playerAgent.provideCustomQuery({
|
||||||
|
video: {
|
||||||
|
speedMenuList: 'bilibili-player-video-btn-speed-menu',
|
||||||
|
speedMenuItem: 'bilibili-player-video-btn-speed-menu-list',
|
||||||
|
speedNameBtn: 'bilibili-player-video-btn-speed-name',
|
||||||
|
speedContainer: 'bilibili-player-video-btn-speed',
|
||||||
|
active: 'bilibili-player-active',
|
||||||
|
show: 'bilibili-player-speed-show',
|
||||||
|
},
|
||||||
|
bangumi: {
|
||||||
|
speedMenuList: 'squirtle-speed-select-list',
|
||||||
|
speedMenuItem: 'squirtle-select-item',
|
||||||
|
speedNameBtn: 'squirtle-speed-select-result',
|
||||||
|
speedContainer: 'squirtle-speed-wrap',
|
||||||
|
active: 'active',
|
||||||
|
// bangumi 那边没有这种 class, 随便填一个就行了
|
||||||
|
show: 'bilibili-player-speed-show',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const trimLeadingDot = (selector: string) => selector.replace(/^\./, '')
|
||||||
|
VideoSpeedController.classNameMap = {
|
||||||
|
speedMenuList: trimLeadingDot(extendedAgent.custom.speedMenuList.selector),
|
||||||
|
speedMenuItem: trimLeadingDot(extendedAgent.custom.speedMenuItem.selector),
|
||||||
|
speedNameBtn: trimLeadingDot(extendedAgent.custom.speedNameBtn.selector),
|
||||||
|
speedContainer: trimLeadingDot(extendedAgent.custom.speedContainer.selector),
|
||||||
|
active: trimLeadingDot(extendedAgent.custom.active.selector),
|
||||||
|
show: trimLeadingDot(extendedAgent.custom.show.selector),
|
||||||
|
video: trimLeadingDot(extendedAgent.query.video.container.selector),
|
||||||
|
}
|
||||||
|
|
||||||
Observer.videoChange(async () => {
|
Observer.videoChange(async () => {
|
||||||
const { getExtraSpeedMenuItemElements } = await import("./extend-video-speed")
|
const { getExtraSpeedMenuItemElements } = await import("./extend-video-speed")
|
||||||
const { calcOrder } = await import("./video-speed-common")
|
const { calcOrder } = await import("./video-speed-common")
|
||||||
@ -176,12 +207,20 @@ export class VideoSpeedController {
|
|||||||
return controller
|
return controller
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this._videoElement = videoElement
|
this._videoElement = videoElement
|
||||||
this._containerElement = containerElement
|
this._containerElement = containerElement
|
||||||
this._previousSpeedVal = previousSpeed
|
this._previousSpeedVal = previousSpeed
|
||||||
this._nativeSpeedVal = nativeSpeed ?? (previousSpeed && VideoSpeedController.nativeSupportedRates.includes(previousSpeed) ? previousSpeed : 1)
|
this._nativeSpeedVal = nativeSpeed ?? (previousSpeed && VideoSpeedController.nativeSupportedRates.includes(previousSpeed) ? previousSpeed : 1)
|
||||||
this._nameBtn = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedNameBtn}`) as HTMLButtonElement
|
this._nameBtn = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedNameBtn}`) as HTMLButtonElement
|
||||||
this._menuListElement = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuList}`) as HTMLElement
|
this._menuListElement = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuList}`) as HTMLElement
|
||||||
|
this._menuListElement.querySelectorAll(`.${VideoSpeedController.classNameMap.speedMenuItem}`).forEach(it => {
|
||||||
|
if (!it.hasAttribute('data-value')) {
|
||||||
|
const speed = parseFloat(it.textContent!).toString()
|
||||||
|
it.setAttribute('data-value', speed)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
VideoSpeedController.instanceMap.set(containerElement, this)
|
VideoSpeedController.instanceMap.set(containerElement, this)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
1.12.16
|
1.12.19
|
||||||
Loading…
Reference in New Issue
Block a user