Bilibili-Evolved/min/video-list.vue.min.js

1 line
3.2 KiB
JavaScript

(()=>(i,t)=>{const e=`<div class=video-list><div class=loading v-if=loading><i class="mdi mdi-18px mdi-loading mdi-spin"></i>加载中...</div><div class=cards :class="{'show-rank': showRank}"v-else-if=cards.length><video-card v-for="card of cards":orientation="useVerticalCards ? 'vertical' : 'horizontal'":key=card.id :data=card></video-card></div><div class=empty v-else>空空如也哦 = ̄ω ̄=</div><div v-show=showTrigger class=trigger ref=trigger>加载中...</div></div>`;t.applyStyleFromText(`.minimal-home .video-list .empty,.minimal-home .video-list .loading{height:48px;display:flex;align-items:center;justify-content:center;font-size:11pt;color:#707070}.minimal-home .video-list .empty .mdi,.minimal-home .video-list .loading .mdi{margin-right:8px}body.dark .minimal-home .video-list .empty,body.dark .minimal-home .video-list .loading{color:#eee}.minimal-home .video-list .trigger{text-align:center;font-size:16px}.minimal-home .video-list .cards{display:flex;flex-wrap:wrap;align-items:flex-end}`,"video-list-style");return{export:Object.assign({template:e},{components:{VideoCard:()=>t.importAsync("video-card.vue")},props:["showRank"],data(){return{cards:[],useVerticalCards:false,loading:true,hasMoreContent:false}},computed:{showTrigger(){return!this.loading&&this.cards.length>0&&this.hasMoreContent&&!this.showRank}},methods:{async getRankList(){const{getTrendingVideos:i}=await t.importAsync("trending-videos");this.cards=await i();this.hasMoreContent=false},async getActivityVideos(){let i="";if(this.cards.length>0){i=this.cards.sort(descendingSort((i=>i.id)))[this.cards.length-1].id}const t=i?`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_history?uid=${getUID()}&offset_dynamic_id=${i}&type=8`:`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${getUID()}&type_list=8`;const e=await Ajax.getJsonWithCredentials(t);if(e.code!==0){throw new Error(e.message)}const s=_.uniqBy(this.cards.concat(e.data.cards.map((i=>{const t=JSON.parse(i.card);const e=_.get(i,"display.topic_info.topic_details",[]).map((i=>({id:i.topic_id,name:i.topic_name})));return{id:i.desc.dynamic_id_str,aid:t.aid,bvid:i.desc.bvid,title:t.title,upID:i.desc.user_profile.info.uid,upName:i.desc.user_profile.info.uname,upFaceUrl:i.desc.user_profile.info.face,coverUrl:t.pic,description:t.desc,timestamp:i.timestamp,time:new Date(i.timestamp*1e3),topics:e,dynamic:t.dynamic,like:formatCount(i.desc.like),duration:t.duration,durationText:formatDuration(t.duration,0),playCount:formatCount(t.stat.view),danmakuCount:formatCount(t.stat.danmaku),watchlater:true}}))),(i=>i.aid));this.hasMoreContent=e.data.cards.length>0;this.cards=s}},async mounted(){try{const i=matchMedia("(max-width: 680px)");this.useVerticalCards=i.matches;i.addListener((i=>{this.useVerticalCards=i.matches}));if(this.showRank){await this.getRankList()}else{await this.getActivityVideos()}console.log("infinite scroll");const t=this.$refs.trigger;const e=new IntersectionObserver((async i=>{console.log(i);if(i.some((i=>i.intersectionRatio>0))){await this.getActivityVideos();if(!this.hasMoreContent){console.log("disconnect");e.disconnect()}}}));e.observe(t)}catch(i){Toast.error(i.message,this.showRank?"热门视频":"视频动态",3e3)}finally{this.loading=false}}})}})();