mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
6.3 KiB
JavaScript
1 line
6.3 KiB
JavaScript
(()=>(t,i)=>{function e(t,i,e){if(i in t){Object.defineProperty(t,i,{value:e,enumerable:true,configurable:true,writable:true})}else{t[i]=e}return t}const{NavbarComponent:a}=i.import("custom-navbar-component");const s=t=>{const i=()=>{switch(t.type){default:case 2:return`https://www.bilibili.com/video/${t.bvid}`;case 12:return`https://www.bilibili.com/audio/au${t.id}`}};return{id:t.id,aid:t.id,bvid:t.bvid,playLink:i(),coverUrl:t.cover.replace("http:","https:"),favoriteTimestamp:t.fav_time*1e3,favoriteTime:new Date(t.fav_time*1e3),title:t.title,description:t.intro,duration:t.duration,durationText:formatDuration(t.duration),playCount:t.cnt_info.play,danmakuCount:t.cnt_info.danmaku,upName:t.upper.name,upFaceUrl:t.upper.face.replace("http:","https:"),upID:t.upper.mid}};class r extends a{constructor(){super();e(this,"vm",void 0);this.boundingWidth=380;this.noPadding=true;this.href=`https://space.bilibili.com/${getUID()}/favlist`;this.html=`收藏`;this.active=document.URL.replace(/\?.*$/,"")===this.href;this.popupHtml=`\n<div class="favorites-list loading">\n<div class="loading-tip">\n 加载中...\n</div>\n<div class="content">\n<div class="header">\n<v-dropdown class="list-select" @change="changeList()" :round="true" :items="listNames" :value.sync="selectedListName">\n</v-dropdown>\n<div class="play-all-container">\n<a class="play-all" :href="playLink" title="播放全部" target="_blank">\n<i class="mdi mdi-play"></i>\n</a>\n</div>\n<div class="search">\n<input type="text" placeholder="搜索" v-model="search">\n</div>\n<a class="more-info" :href="moreLink" title="查看更多" target="_blank">\n<i class="mdi mdi-dots-horizontal"></i>\n</a>\n</div>\n<transition-group name="cards" tag="div" class="cards">\n<div class="empty-tip" v-if="!cardsLoading && filteredCards.length === 0" key="empty-tip">\n 空空如也哦 = ̄ω ̄=\n</div>\n<div class="favorite-card" v-for="card of filteredCards" :key="card.id">\n<a class="cover-container" target="_blank" :href="card.playLink">\n<dpi-img class="cover" :src="card.coverUrl" :size="{width: 130, height: 85}"></dpi-img>\n<div class="floating duration">{{card.durationText}}</div>\n<div class="floating favorite-time">{{card.favoriteTime | formatDate}}</div>\n</a>\n<a class="title" target="_blank" :href="card.playLink" :title="card.title">{{card.title}}</a>\n<a class="up" target="_blank" :href="'https://space.bilibili.com/' + card.upID" :title="card.upName">\n<dpi-img placeholder-image class="face" :src="card.upFaceUrl" :size="20"></dpi-img>\n<div class="name">{{card.upName}}</div>\n</a>\n</div>\n<div class="loading-tip" v-if="cardsLoading" key="loading-tip">\n 加载中...\n</div>\n</transition-group>\n</div>\n</div>\n`;this.initialPopup=()=>this.init()}get name(){return"favoritesList"}async init(){this.vm=new Vue({el:await SpinQuery.select(`.custom-navbar [data-name="${this.name}"] .favorites-list`),store:store,filters:{formatDate(t){return`${t.getFullYear()}-${(t.getMonth()+1).toString().padStart(2,"0")}-${t.getDate().toString().padStart(2,"0")}`}},components:{DpiImg:()=>i.importAsync("dpi-img.vue"),VDropdown:()=>i.importAsync("v-dropdown.vue")},data:{list:[],cards:[],filteredCards:[],selectedListName:"",cardsLoading:true,cardsPage:1,search:""},watch:{search(t){if(t===""){this.filteredCards=this.cards;return}t=t.toLowerCase();this.filteredCards=this.cards.filter((i=>i.title.toLowerCase().includes(t)||i.upName.toLowerCase().includes(t)));this.searchAllList()},selectedListName(i){t.favoritesListCurrentSelect=i}},computed:{listNames(){return this.list.map((t=>t.name))},selectedListId(){const t=this.list.find((t=>t.name===this.selectedListName));return t?t.id:0},moreLink(){const t=this.selectedListId;if(t===0){return`https://space.bilibili.com/${getUID()}/favlist`}return`https://space.bilibili.com/${getUID()}/favlist?fid=${t}`},playLink(){const t=this.selectedListId;if(t===0){return undefined}return`https://www.bilibili.com/medialist/play/ml${t}`}},methods:{async getCards(){const i=`https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=${this.selectedListId}&pn=${this.cardsPage}&ps=20`;const e=await Ajax.getJsonWithCredentials(i);if(e.code!==0){throw new Error(`加载收藏夹内容失败: ${e.message}`)}if(!e.data.medias){return[]}return e.data.medias.filter((i=>{if(t.customNavbarShowDeadVideos){return true}return i.attr!==9&&i.attr!==1})).map(s)},async changeList(){try{this.search="";this.cards=[];this.cardsPage=1;this.cardsLoading=true;this.cards=await this.getCards();this.filteredCards=this.cards;this.setInfiniteScroll()}catch(t){logError(t)}finally{this.cardsLoading=false}},async loadNextPage(){try{this.cardsLoading=true;this.cardsPage++;const t=await this.getCards();this.cards.push(...t);if(t.length>0){this.setInfiniteScroll()}}catch(t){logError(t)}finally{this.cardsLoading=false}},setInfiniteScroll(){const t=this.$el.querySelector(".cards");const i=_.debounce((()=>{if(this.search===""&&t.scrollTop+t.clientHeight>=t.scrollHeight-48){t.removeEventListener("scroll",i);this.loadNextPage()}}),200);t.addEventListener("scroll",i)},searchAllList:_.debounce((async function(){if(this.search===""){return}try{const t=await Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/v3/fav/resource/list?media_id=${this.selectedListId}&pn=1&ps=20&keyword=${this.search}&order=mtime&type=0&tid=0`);const i=await Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/v3/fav/resource/list?media_id=${this.selectedListId}&pn=1&ps=20&keyword=${this.search}&order=mtime&type=1&tid=0`);if(t.code!==0&&i.code!==0){return}const e=_.get(t,"data.medias",[])||[];const a=_.get(i,"data.medias",[])||[];const r=_.uniqBy(this.filteredCards.concat(e.map(s),a.map(s)),(t=>t.id));this.filteredCards=r}catch(t){console.error(t);return}}),200)},async mounted(){try{const i=`https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=${getUID()}&is_space=0`;const e=await Ajax.getJsonWithCredentials(i);if(e.code!==0){throw new Error(`获取收藏夹列表失败: ${e.message}`)}this.list=e.data.list.map((t=>({id:t.id,name:t.title,count:t.media_count})));if(this.list.length>0){if(t.favoritesListCurrentSelect&&this.list.some((i=>i.name===t.favoritesListCurrentSelect))){this.selectedListName=t.favoritesListCurrentSelect}else{this.selectedListName=this.list[0].name}this.changeList()}}catch(t){logError(t)}finally{this.$el.classList.remove("loading")}}})}}return{export:{FavoritesList:r}}})(); |