mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
30 KiB
JavaScript
1 line
30 KiB
JavaScript
(()=>{return(i,t)=>{if(isIframe()){return}document.body.style.setProperty("--navbar-bounds-padding",`0 ${i.customNavbarBoundsPadding}%`);let e=true;const s={widget:{content:`\n <div class="gui-settings-flat-button" id="custom-navbar-settings">\n <i class="mdi mdi-24px mdi-auto-fix"></i>\n <span>顶栏布局</span>\n </div>`,condition:()=>e,success:async()=>{await SpinQuery.select(".custom-navbar-settings");await t.importAsync("slip");const{debounce:e}=await t.importAsync("debounce");const s=document.querySelector("#custom-navbar-settings");s.addEventListener("click",async()=>{const i=await SpinQuery.select(".custom-navbar-settings");if(i){i.classList.toggle("show");document.querySelector(".gui-settings-mask").click()}});s.addEventListener("mouseover",()=>{const t={blank1:"弹性空白1",logo:"Logo",category:"主站",rankingLink:"排行",drawingLink:"相簿",musicLink:"音频",gamesIframe:"游戏中心",livesIframe:"直播",shopLink:"会员购",mangaLink:"漫画",blank2:"弹性空白2",search:"搜索框",userInfo:"用户信息",messages:"消息",activities:"动态",watchlaterList:"稍后再看",favoritesList:"收藏",historyList:"历史",upload:"投稿入口",blank3:"弹性空白3"};Vue.component("order-item",{props:["item"],template:`\n <li v-on:mouseenter="viewBorder(true)"\n v-on:mouseleave="viewBorder(false)"\n v-bind:class="{hidden: hidden()}">\n <i class="mdi mdi-menu"></i>\n {{item.displayName}}\n <button v-on:click="toggleHidden()">\n <i v-if="hidden()" class="mdi mdi-eye-off"></i>\n <i v-else class="mdi mdi-eye"></i>\n </button>\n </li>\n `,methods:{hidden(){return i.customNavbarHidden.includes(this.item.name)},viewBorder(i){const t=document.querySelector(`.custom-navbar li[data-name='${this.item.name}']`);if(t!==null){t.classList[i?"add":"remove"]("view-border")}},toggleHidden(){const t=this.hidden();if(t===false){i.customNavbarHidden.push(this.item.name);i.customNavbarHidden=i.customNavbarHidden}else{const t=i.customNavbarHidden.indexOf(this.item.name);if(t===-1){return}i.customNavbarHidden.splice(t,1);i.customNavbarHidden=i.customNavbarHidden}this.$forceUpdate();const e=document.querySelector(`.custom-navbar li[data-name='${this.item.name}']`);if(e!==null){e.style.display=t?"flex":"none"}}}});const s=e(t=>{i.customNavbarBoundsPadding=t;document.body.style.setProperty("--navbar-bounds-padding",`0 ${t}%`)},200);new Vue({el:".custom-navbar-settings",mounted(){const t=document.querySelector(".custom-navbar-settings .order-list");const e=({sourceItem:e,targetItem:s,orderBefore:a,orderAfter:n})=>{if(a===n){return}const l=Object.entries(i.customNavbarOrder);const o=l.sort((i,t)=>i[1]-t[1]).map(i=>i[0]);if(a<n){for(let t=a+1;t<=n;t++){const e=o[t];i.customNavbarOrder[e]=t-1;document.querySelector(`.custom-navbar li[data-name='${e}']`).style.order=t-1}}else{for(let t=a-1;t>=n;t--){const e=o[t];i.customNavbarOrder[e]=t+1;document.querySelector(`.custom-navbar li[data-name='${e}']`).style.order=t+1}}i.customNavbarOrder[o[a]]=n;document.querySelector(`.custom-navbar li[data-name='${o[a]}']`).style.order=n;i.customNavbarOrder=i.customNavbarOrder;t.insertBefore(e,s)};new Slip(t);t.addEventListener("slip:beforewait",i=>{if(i.target.classList.contains("mdi-menu")){i.preventDefault()}},false);t.addEventListener("slip:beforeswipe",i=>i.preventDefault(),false);t.addEventListener("slip:reorder",i=>{e({sourceItem:i.target,targetItem:i.detail.insertBefore,orderBefore:i.detail.originalIndex,orderAfter:i.detail.spliceIndex});return false},false)},computed:{orderList(){const e=Object.entries(i.customNavbarOrder);return e.sort((i,t)=>i[1]-t[1]).map(i=>{return{displayName:t[i[0]],name:i[0],order:i[1]}})}},data:{boundsPadding:i.customNavbarBoundsPadding},watch:{boundsPadding(i){s(i)}},methods:{close(){document.querySelector(".custom-navbar-settings").classList.remove("show")},restoreDefault(){if(typeof customNavbarDefaultOrders==="undefined"){Toast.error("未找到默认值设定, 请更新您的脚本.");return}if(confirm("确定要恢复默认顶栏布局吗? 恢复后页面将刷新.")){this.boundsPadding=5;i.customNavbarOrder=customNavbarDefaultOrders;location.reload()}}}})},{once:true})}},unload:()=>{const i=document.querySelectorAll(".custom-navbar,.custom-navbar-settings");i.forEach(i=>i.style.display="none");t.removeStyle("customNavbarStyle")},reload:()=>{const i=document.querySelector(".custom-navbar,.custom-navbar-settings");i.forEach(i=>i.style.display="flex");t.applyImportantStyle("customNavbarStyle")}};const a=(i,t,e)=>{e.classList[t?"add":"remove"](i)};const n=i=>{document.querySelector(".custom-navbar").classList[i?"add":"remove"]("dark");document.querySelector(".custom-navbar-settings").classList[i?"add":"remove"]("dark")};addSettingsListener("allNavbarFill",i=>a("all-navbar-fill",i,document.body));a("all-navbar-fill",i.allNavbarFill,document.body);const l=["/www.bilibili.com","/t.bilibili.com","/search.bilibili.com","/space.bilibili.com","/account.bilibili.com","/pay.bilibili.com","/member.bilibili.com","/big.bilibili.com","/message.bilibili.com","/app.bilibili.com"];const o=["/t.bilibili.com/lottery/h5/index/#/result","/member.bilibili.com/video/upload"];if(!l.some(i=>document.URL.includes(i))||o.some(i=>document.URL.includes(i))){e=false;return s}let r={};let c={};class m{constructor(){this.html=``;this.popupHtml=``;this.flex=`0 0 auto`;this.disabled=false;this.requestedPopup=false;this.onPopup=null;this.href=null;this.notifyCount=0;this.touch=i.touchNavBar;this.active=false}get name(){return"undefined"}get order(){return i.customNavbarOrder[this.name]}get hidden(){return i.customNavbarHidden.includes(this.name)}}class b extends m{constructor(i){super();this.number=i;this.flex="1 0 auto";this.disabled=true}get name(){return"blank"+this.number}}class u extends m{constructor(){super();this.href=`https://www.bilibili.com/`;this.html=`<i class="custom-navbar-iconfont custom-navbar-icon-logo"></i>`;this.touch=false}get name(){return"logo"}}class d extends m{constructor(i,t,e){super();this.linkName=e;this.html=i;this.href=t;this.touch=false;this.active=document.URL.startsWith(t)}get name(){return this.linkName+"Link"}}class p extends m{constructor(){super();this.href="https://member.bilibili.com/v2#/upload/video/frame";this.html=`\n <svg style="width:22px;height:22px" viewBox="0 0 24 24">\n <path d="M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z" />\n </svg>\n <div id="upload-button">投稿</div>`;this.popupHtml=`\n <ul id="upload-actions">\n <li><a target="_blank" href="https://member.bilibili.com/v2#/upload/text/apply">专栏投稿</a></li>\n <li><a target="_blank" href="https://member.bilibili.com/v2#/upload/audio/">音频投稿</a></li>\n <li><a target="_blank" href="https://member.bilibili.com/v2#/upload/video/frame">视频投稿</a></li>\n <li><a target="_blank" href="https://member.bilibili.com/v2#/upload-manager/article">投稿管理</a></li>\n <li><a target="_blank" href="https://member.bilibili.com/v2#/home">创作中心</a></li>\n </ul>\n `}get name(){return"upload"}}class h extends m{constructor(){super();this.href="https://message.bilibili.com/";this.html="消息";this.popupHtml=`\n <ul id="message-list">\n <li><a data-name="reply_me" target="_blank" href="https://message.bilibili.com/#/reply">回复我的</a></li>\n <li><a data-name="at_me" target="_blank" href="https://message.bilibili.com/#/at">@我的</a></li>\n <li><a data-name="praise_me" target="_blank" href="https://message.bilibili.com/#/love">收到的赞</a></li>\n <li><a data-name="notify_me" target="_blank" href="https://message.bilibili.com/#/system">系统通知</a></li>\n </ul>\n `;this.requestedPopup=true;this.active=document.URL.startsWith("https://message.bilibili.com/");this.init()}get name(){return"messages"}async init(){const i=await Ajax.getJsonWithCredentials("https://message.bilibili.com/api/notify/query.notify.count.do");const t=await SpinQuery.select("#message-list");const e=[...t.querySelectorAll("a[data-name]")];const s=e.map(i=>i.getAttribute("data-name"));if(i.code!==0){return}const a=await SpinQuery.select(`.custom-navbar li[data-name='${this.name}'] .notify-count`);let n=s.reduce((t,e)=>t+i.data[e],0);if(!n){return}a.innerHTML=n;s.forEach((t,s)=>{const a=i.data[t];if(a>0){e[s].setAttribute("data-count",a)}else{e[s].removeAttribute("data-count")}});e.forEach(i=>{i.addEventListener("click",()=>{const t=i.getAttribute("data-count");i.removeAttribute("data-count");n-=t;a.innerHTML=n||""})})}}class w extends m{constructor(){super();this.html=`主站`;this.requestedPopup=true;this.popupHtml=`\n <ul id="custom-navbar-home-popup">\n <li class="category-item" v-for="item of info" v-bind:class="{ main: item[1].count }">\n <a v-bind:href="item[1].link">\n <svg aria-hidden="true">\n <use v-bind:href="'#header-icon-' + item[1].icon" v-bind:xlink:href="'#header-icon-' + item[1].icon"></use>\n </svg>\n <div>{{item[0]}}</div>\n <span>{{item[1].count}}</span>\n </a>\n <div class="popup" v-if="item[1].subRegions">\n <a v-for="region of Object.entries(item[1].subRegions)" v-bind:href="region[1]">\n {{region[0]}}\n </a>\n </div>\n </li>\n </ul>\n `;this.getOnlineInfo().then(i=>{new Vue({el:"#custom-navbar-home-popup",data:{info:Object.entries(i)}})})}get name(){return"category"}async getOnlineInfo(){const i=await Ajax.getJson("https://api.bilibili.com/x/web-interface/online");if(parseInt(i.code)!==0){throw new Error(`[自定义顶栏] 分区投稿信息获取失败: ${i.message}`)}const t=i.data.region_count;await SpinQuery.select("#custom-navbar-home-popup");return{"动画":{icon:"douga",count:t[1],link:`https://www.bilibili.com/v/douga/`,subRegions:{"MAD·AMV":`https://www.bilibili.com/v/douga/mad/`,"MMD·3D":`https://www.bilibili.com/v/douga/mmd/`,"短片·手书·配音":`https://www.bilibili.com/v/douga/voice/`,"综合":`https://www.bilibili.com/v/douga/other/`}},"番剧":{icon:"anime",count:t[13],link:`https://www.bilibili.com/anime/`,subRegions:{"连载动画":`https://www.bilibili.com/v/anime/serial/`,"完结动画":`https://www.bilibili.com/v/anime/finish/`,"资讯":`https://www.bilibili.com/v/anime/information/`,"官方延伸":`https://www.bilibili.com/v/anime/offical/`,"新番时间表":`https://www.bilibili.com/anime/timeline/`}},"国创":{icon:"guochuang",count:t[167],link:`https://www.bilibili.com/guochuang/`,subRegions:{"国产动画":`https://www.bilibili.com/v/guochuang/chinese/`,"国产原创相关":`https://www.bilibili.com/v/guochuang/original/`,"布袋戏":`https://www.bilibili.com/v/guochuang/puppetry/`,"资讯":`https://www.bilibili.com/v/guochuang/information/`,"新番时间表":`https://www.bilibili.com/guochuang/timeline/`,"国产动画索引":`https://www.bilibili.com/guochuang/index/`}},"音乐":{icon:"music",count:t[3],link:`https://www.bilibili.com/v/music/`,subRegions:{"原创音乐":"https://www.bilibili.com/v/music/original/","翻唱":"https://www.bilibili.com/v/music/cover/","VOCALOID·UTAU":"https://www.bilibili.com/v/music/vocaloid/","电音":"https://www.bilibili.com/v/music/electronic/","演奏":"https://www.bilibili.com/v/music/perform/",MV:"https://www.bilibili.com/v/music/mv/","音乐现场":"https://www.bilibili.com/v/music/live/","音乐综合":"https://www.bilibili.com/v/music/other/","音频":"https://www.bilibili.com/audio/home?musicType=music"}},"舞蹈":{icon:"dance",count:t[129],link:`https://www.bilibili.com/v/dance/`,subRegions:{"宅舞":"https://www.bilibili.com/v/dance/otaku/","三次元舞蹈":"https://www.bilibili.com/v/dance/three_d/","舞蹈教程":"https://www.bilibili.com/v/dance/demo/"}},"游戏":{icon:"game",count:t[4],link:`https://www.bilibili.com/v/game/`,subRegions:{"单机游戏":"https://www.bilibili.com/v/game/stand_alone/","电子竞技":"https://www.bilibili.com/v/game/esports/","手机游戏":"https://www.bilibili.com/v/game/mobile/","网络游戏":"https://www.bilibili.com/v/game/online/","桌游棋牌":"https://www.bilibili.com/v/game/board/",GMV:"https://www.bilibili.com/v/game/gmv/","音游":"https://www.bilibili.com/v/game/music/",Mugen:"https://www.bilibili.com/v/game/mugen/","游戏赛事":"https://www.bilibili.com/v/game/match/"}},"科技":{icon:"technology",count:t[36],link:`https://www.bilibili.com/v/technology/`,subRegions:{"趣味科普人文":"https://www.bilibili.com/v/technology/fun/","野生技术协会":"https://www.bilibili.com/v/technology/wild/","演讲·公开课":"https://www.bilibili.com/v/technology/speech_course/","星海":"https://www.bilibili.com/v/technology/military/","机械":"https://www.bilibili.com/v/technology/mechanical/","汽车":"https://www.bilibili.com/v/technology/automobile/"}},"数码":{icon:"digital",count:t[188],link:`https://www.bilibili.com/v/digital/`,subRegions:{"手机平板":"https://www.bilibili.com/v/digital/mobile/","电脑装机":"https://www.bilibili.com/v/digital/pc/","摄影摄像":"https://www.bilibili.com/v/digital/photography/","影音智能":"https://www.bilibili.com/v/digital/intelligence_av/"}},"生活":{icon:"life",count:t[160],link:`https://www.bilibili.com/v/life/`,subRegions:{"搞笑":"https://www.bilibili.com/v/life/funny/","日常":"https://www.bilibili.com/v/life/daily/","美食圈":"https://www.bilibili.com/v/life/food/","动物圈":"https://www.bilibili.com/v/life/animal/","手工":"https://www.bilibili.com/v/life/handmake/","绘画":"https://www.bilibili.com/v/life/painting/","运动":"https://www.bilibili.com/v/life/sports/","其他":"https://www.bilibili.com/v/life/other/"}},"鬼畜":{icon:"kichiku",count:t[119],link:`https://www.bilibili.com/v/kichiku/`,subRegions:{"鬼畜调教":"https://www.bilibili.com/v/kichiku/guide/","音MAD":"https://www.bilibili.com/v/kichiku/mad/","人力VOCALOID":"https://www.bilibili.com/v/kichiku/manual_vocaloid/","教程演示":"https://www.bilibili.com/v/kichiku/course/"}},"时尚":{icon:"fashion",count:t[155],link:`https://www.bilibili.com/v/fashion/`,subRegions:{"美妆":"https://www.bilibili.com/v/fashion/makeup/","服饰":"https://www.bilibili.com/v/fashion/clothing/","健身":"https://www.bilibili.com/v/fashion/aerobics/","T台":"https://www.bilibili.com/v/fashion/catwalk/","风尚标":"https://www.bilibili.com/v/fashion/trends/"}},"广告":{icon:"ad",count:t[165],link:`https://www.bilibili.com/v/ad/ad/`},"娱乐":{icon:"ent",count:t[5],link:`https://www.bilibili.com/v/ent/`,subRegions:{"综艺":"https://www.bilibili.com/v/ent/variety/","明星":"https://www.bilibili.com/v/ent/star/","Korea相关":"https://www.bilibili.com/v/ent/korea/"}},"影视":{icon:"cinephile",count:t[181],link:`https://www.bilibili.com/v/cinephile/`,subRegions:{"影视杂谈":"https://www.bilibili.com/v/cinephile/cinecism/","影视剪辑":"https://www.bilibili.com/v/cinephile/montage/","短片":"https://www.bilibili.com/v/cinephile/shortfilm/","预告·资讯":"https://www.bilibili.com/v/cinephile/trailer_info/","特摄":"https://www.bilibili.com/v/cinephile/tokusatsu/"}},"放映厅":{icon:"cinema",count:t[177]+t[23]+t[11],link:`https://www.bilibili.com/cinema/`,subRegions:{"纪录片":"https://www.bilibili.com/documentary/","电影":"https://www.bilibili.com/movie/","电视剧":"https://www.bilibili.com/tv/"}},"专栏":{icon:"read",count:``,link:`https://www.bilibili.com/read/home`},"直播":{icon:"zhibo",count:``,link:`https://live.bilibili.com`,subRegions:{"全部直播":"https://live.bilibili.com/all?visit_id=5icxsa0kmts0","游戏直播":"https://live.bilibili.com/p/eden/area-tags?parentAreaId=2&areaId=0&visit_id=5icxsa0kmts0#/2/0","手游直播":"https://live.bilibili.com/p/eden/area-tags?parentAreaId=3&areaId=0&visit_id=5icxsa0kmts0#/3/0","娱乐直播":"https://live.bilibili.com/p/eden/area-tags?parentAreaId=1&areaId=0&visit_id=5icxsa0kmts0#/1/0","电台直播":"https://live.bilibili.com/p/eden/area-tags?parentAreaId=5&areaId=0&visit_id=5icxsa0kmts0#/5/0","绘画直播":"https://live.bilibili.com/p/eden/area-tags?parentAreaId=4&areaId=0&visit_id=5icxsa0kmts0#/4/0"}},"小黑屋":{icon:"blackroom",count:``,link:`https://www.bilibili.com/blackroom/`},"话题":{icon:"topic",count:``,link:`https://www.bilibili.com/blackboard/topic_list.html`},"活动":{icon:"activit",count:``,link:`https://www.bilibili.com/blackboard/x/act_list`}}}}class v extends m{constructor(){super();this.href="https://space.bilibili.com";this.html=`\n <div class="user-face-container">\n <img src='data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"></svg>' class="user-face"></img>\n <img src='data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"></svg>' class="user-pendant"></img>\n </div>\n `;this.popupHtml=`\n <div class="user-info-panel">\n <div v-if="isLogin" class="logged-in">\n <a class="name" target="_blank" href="https://space.bilibili.com/">{{uname}}</a>\n <div class="row">\n <a target="_blank" title="等级" href="https://account.bilibili.com/site/record?type=exp" class="level">LV<strong>{{level_info.current_level}}</strong></a>\n <a target="_blank" href="https://account.bilibili.com/account/big" class="type">{{userType}}</a>\n <div class="level-progress">\n <div class="level-progress-thumb" v-bind:style="levelProgressStyle"></div>\n </div>\n <span class="level-progress-label">{{level_info.current_exp}} / {{level_info.next_exp}}</span>\n </div>\n <div class="row">\n <div class="coins-container">\n <a target="_blank" href="https://account.bilibili.com/site/coin" title="硬币" class="coins">{{money}}</a>\n <a target="_blank" href="https://pay.bilibili.com/bb_balance.html" title="B币" class="b-coins">{{wallet.bcoin_balance}}</a>\n </div>\n <div class="verifications">\n <a target="_blank" v-bind:class="{verified: email_verified }" title="邮箱验证" href="https://passport.bilibili.com/account/security#/bindmail">\n <i class="mdi mdi-email"></i>\n </a>\n <a target="_blank" v-bind:class="{verified: mobile_verified }" title="手机验证" href="https://passport.bilibili.com/account/security#/bindphone">\n <i class="mdi mdi-cellphone-android"></i>\n </a>\n </div>\n </div>\n <div class="row operations">\n <a target="_blank" href="https://account.bilibili.com/account/home">\n <i class="mdi mdi-account"></i>个人中心\n </a>\n <a target="_blank" href="https://member.bilibili.com/v2#/upload-manager/article">\n <i class="mdi mdi-square-edit-outline"></i>投稿管理\n </a>\n </div>\n <div class="row operations">\n <a target="_blank" href="https://pay.bilibili.com/">\n <i class="mdi mdi-wallet"></i>B币钱包\n </a>\n <a target="_blank" href="https://link.bilibili.com/p/center/index">\n <i class="mdi mdi-video-input-antenna"></i>直播中心\n </a>\n </div>\n <div class="row operations">\n <a target="_blank" href="https://show.bilibili.com/orderlist">\n <i class="mdi mdi-ticket"></i>订单中心\n </a>\n <a href="https://account.bilibili.com/login?act=exit">\n <i class="mdi mdi-logout"></i>退出登录\n </a>\n </div>\n </div>\n <div v-else class="not-logged-in">\n <a href="https://passport.bilibili.com/login" class="login">登录</a>\n <a href="https://passport.bilibili.com/register/phone.html" class="sign-up">注册</a>\n </div>\n </div>\n `;this.requestedPopup=true;this.init()}get name(){return"userInfo"}async init(){const i=await SpinQuery.select(".custom-navbar .user-info-panel");new Vue({el:i,data:{...r},computed:{userType(){if(!this.isLogin){return"未登录"}if(this.level_info.current_level===0){return"注册会员"}if(this.vipStatus===1){if(this.vipType===1){return this.vip_theme_type?"小会员":"大会员"}else if(this.vipType===2){return this.vip_theme_type?"年度小会员":"年度大会员"}}return"正式会员"},levelProgressStyle(){const i=(this.level_info.next_exp-this.level_info.current_exp)/(this.level_info.next_exp-this.level_info.current_min);return{transform:`scaleX(${i})`}}}});const t=await SpinQuery.select(".custom-navbar .user-face-container .user-face");if(r.isLogin){const i=r.face.replace("http","https");const e=68;const s=[1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4];t.setAttribute("srcset",s.map(t=>{return`${i}@${parseInt(e*t)}w_${parseInt(e*t)}h.jpg ${t}x`}).join(","));if(r.pendant.image){const i=await SpinQuery.select(".custom-navbar .user-face-container .user-pendant");const t=r.pendant.image.replace("http","https");const e=116;i.setAttribute("srcset",s.reduce((i,s)=>{return i+`, ${t}@${parseInt(e*s)}w_${parseInt(e*s)}h.png ${s}x`},""))}}else{t.setAttribute("src","https://static.hdslb.com/images/akari.jpg")}}}class g extends m{constructor(){super();this.disabled=true;this.html=`\n <form id="custom-navbar-search" autocomplete="off" target="_blank" method="get" action="https://search.bilibili.com/all">\n <input type="text" placeholder="搜索" name="keyword">\n <input type="hidden" name="from_source" value="banner_search">\n <a style="display: none" target="_blank" class="recommended-target"></a>\n <button type="submit" title="搜索">\n <svg style="width:22px;height:22px" viewBox="0 0 24 24">\n <path d="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />\n </svg>\n </button>\n </form>\n `;this.init()}async init(){const t=await SpinQuery.select("#custom-navbar-search");const e=t.querySelector("input[name='keyword']");t.addEventListener("submit",s=>{if(e.value===""){if(!i.hideTopSearch){t.querySelector(".recommended-target").click()}s.preventDefault();return false}return true});if(!i.hideTopSearch){const i=await Ajax.getJson("https://api.bilibili.com/x/web-interface/search/default");if(i.code===0){e.setAttribute("placeholder",i.data.show_name);if(i.data.name.startsWith("av")){t.querySelector(".recommended-target").setAttribute("href",`https://www.bilibili.com/${i.data.name}`)}else{t.querySelector(".recommended-target").setAttribute("href",`https://search.bilibili.com/all?keyword=${i.data.name}`)}}else{console.error("[自定义顶栏] 获取搜索推荐词失败")}}}get name(){return"search"}}class f extends m{constructor(i,t,{src:e,width:s,height:a,lazy:n,iframeName:l}){super();this.iframeName=l;this.html=i;this.href=t;this.popupHtml=`\n <iframe src="${e}" frameborder="0" width="${s}" height="${a}"></iframe>\n `;this.noPadding=true;this.requestedPopup=n?false:true;this.touch=false;this.transparent=true}get name(){return this.iframeName+"Iframe"}}class y extends f{constructor(...t){super(...t);this.touch=i.touchNavBar;this.getNotifyCount()}getApiUrl(){return null}getCount(){return 0}async getNotifyCount(){const i=await SpinQuery.select(`.custom-navbar li[data-name='${this.name}'] .notify-count`);const t=await Ajax.getJsonWithCredentials(this.getApiUrl());const e=this.getCount(t);if(t.code===0&&e){i.innerHTML=e;this.onPopup=(()=>{i.innerHTML=""})}}}class k extends y{constructor(){super("动态",i.oldTweets?"https://www.bilibili.com/account/dynamic":"https://t.bilibili.com/",{src:`https://t.bilibili.com/pages/nav/index`,width:`380px`,height:`422px`,lazy:true});this.active=document.URL==="https://t.bilibili.com/"}getApiUrl(){const i=document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)bp_t_offset_${r.mid}\\s*\\=\\s*([^;]*).*$)|^.*$`),"$1");return`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_num?rsp_type=1&uid=${r.mid}&update_num_dy_id=${i}&type_list=8,512,64`}getCount(i){return i.data.update_num}get name(){return"activities"}}class _ extends m{constructor({mainUrl:i,name:t,apiUrl:e,listName:s,listMap:a}){super();this.href=i;this.listName=s;this.html=t;this.requestedPopup=false;this.popupHtml=`\n <ol class="video-list ${s}">\n <li class="loading">加载中...</li>\n </ol>\n `;this.onPopup=(async()=>{if(!a){return}const n=await SpinQuery.select(`.video-list.${s}`);if(n===null){return}const l=await Ajax.getJsonWithCredentials(e);if(l.code!==0){logError(`加载${t}信息失败. 错误码: ${l.code} ${l.message}`);return}const o=a(l).join("");n.insertAdjacentHTML("beforeend",o+`\n <li class="more"><a target="_blank" href="${i}">查看更多</a></li>\n `);n.classList.add("loaded")})}get name(){return this.listName+"List"}}class x extends _{constructor(){super({name:"稍后再看",mainUrl:"https://www.bilibili.com/watchlater/#/list",apiUrl:"https://api.bilibili.com/x/v2/history/toview/web",listName:"watchlater",listMap:t=>{return t.data.list.slice(0,6).map(t=>{const e=t.pages.map(i=>i.cid);const s=t.cid===0?1:e.indexOf(t.cid)+1;const a=i.watchLaterRedirect?`https://www.bilibili.com/video/av${t.aid}?p=${s}`:`https://www.bilibili.com/watchlater/#/av${t.aid}/p${s}`;return`<li>\n <a target="_blank" href="${a}">${t.title}</a>\n </li>`})}});this.active=document.URL.startsWith("https://www.bilibili.com/watchlater/")}}class L extends _{constructor(){super({name:"收藏",mainUrl:`https://space.bilibili.com/${r.mid}/favlist`,apiUrl:"https://api.bilibili.com/medialist/gateway/coll/resource/recent",listName:"favorites",listMap:i=>{return i.data.map(i=>{return`<li>\n <a target="_blank" href="https://www.bilibili.com/video/av${i.id}">${i.title}</a>\n </li>`})}});this.active=document.URL===`https://space.bilibili.com/${r.mid}/favlist`}}class $ extends _{constructor(){super({name:"历史",mainUrl:"https://www.bilibili.com/account/history",apiUrl:"https://api.bilibili.com/x/v2/history?pn=1&ps=6",listName:"history",listMap:i=>{return i.data.map(i=>{let t=[];let e="";const s=i.page?i.page.page:1;const a=i.progress>=0?i.progress/i.duration:1;if(s!==1){t.push(`p=${s}`);e+=`看到第${s}话`}if(i.progress>0&&i.progress<i.duration){t.push(`t=${i.progress}`);e+=` ${Math.floor(a*100)}%`}else if(i.progress===0){e+=` 刚开始看`}else{e+=" 100%"}return`<li class="history-item">\n <a target="_blank" href="https://www.bilibili.com/video/av${i.aid}?${t.join("&")}">\n <span class="title">${i.title}</span>\n <span class="description">${e}</span>\n <div class="progress" style="transform: scaleX(${a})"></div>\n </a>\n </li>`})}});this.active=document.URL==="https://www.bilibili.com/account/history"}}(async()=>{const e=await t.importAsync("customNavbarHtml");const s=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/web-interface/nav");r=s.data;document.body.insertAdjacentHTML("beforeend",e);addSettingsListener("useDarkStyle",n);n(i.useDarkStyle);["Fill","Shadow","Compact","Blur"].forEach(t=>{addSettingsListener("customNavbar"+t,i=>a(t.toLowerCase(),i,document.querySelector(".custom-navbar")));a(t.toLowerCase(),i["customNavbar"+t],document.querySelector(".custom-navbar"))});SpinQuery.condition(()=>document.getElementById("banner_link"),i=>i===null?null:i.style.backgroundImage,i=>{Observer.attributes(i,()=>{const t=document.querySelectorAll(".custom-navbar .blur-layer");t.forEach(t=>{t.style.backgroundImage=i.style.backgroundImage;t.setAttribute("data-image",i.style.backgroundImage)})})});const l=[new b(1),new u,new w,new d("排行","https://www.bilibili.com/ranking","ranking"),new d("相簿","https://h.bilibili.com","drawing"),new d("音频","https://www.bilibili.com/audio/home/","music"),new f("游戏中心","https://game.bilibili.com/",{src:`https://www.bilibili.com/page-proxy/game-nav.html`,width:`680px`,height:`260px`,lazy:true,iframeName:"games"}),new f("直播","https://live.bilibili.com",{src:`https://live.bilibili.com/blackboard/dropdown-menu.html`,width:`528px`,height:`266px`,lazy:true,iframeName:"lives"}),new d("会员购","https://show.bilibili.com","shop"),new d("漫画","https://manga.bilibili.com","manga"),new b(2),new g,new v];if(r.isLogin){l.push(new h,new k,new x,new L,new $)}l.push(new p,new b(3));new Vue({el:".custom-navbar",data:{components:l},methods:{requestPopup(i){if(!i.requestedPopup&&!i.disabled&&!i.active){this.$set(i,`requestedPopup`,true);i.onPopup&&i.onPopup()}}}})})();return s}})(); |