Bilibili-Evolved/min/simple-home-categories.vue.min.js
2021-09-28 23:25:38 +08:00

1 line
4.4 KiB
JavaScript

(()=>(e,t)=>{const r=`<div class=categories><div class=header><div class=title>分区</div><div class=tabs ref=reorderContainer><div class=tab v-for="t of tabs":key=t.key :data-key=t.key :style="{order: getOrder(t.key)}":class="{active: selectedTab === t.key}"@click=selectTab(t)><div class=tab-name>{{t.name}}</div></div></div><div class=buttons><div class=toggle-reorder @click="reordering = !reordering; reorder.toggle()"><icon type=mdi :icon="reordering ? 'check' : 'swap-horizontal'"></icon>{{reordering ? '完成' : '排序'}}</div></div></div><transition mode=out-in><component class=category-content :is=content :rid=rid></component></transition></div>`;t.applyStyleFromText(`.simple-home .categories{--loading-from:#d4d4d4;--loading-to:#ddd;--slideshow-ratio:0.6;--rank-width:min(20vw, 380px);--rank-height:calc(var(--rank-width) / 16 * 10);--card-height:22vh;--card-width:calc(var(--card-height) * (42 / 25));display:flex;flex-direction:column}body.dark .simple-home .categories{--loading-from:#333;--loading-to:#262626}@keyframes category-loading{from{background-color:var(--loading-from)}to{background-color:var(--loading-to)}}.simple-home .categories,.simple-home .categories *,.simple-home .categories ::after,.simple-home .categories ::before{transition:.2s ease-out}.simple-home .categories .header .tabs{display:flex;flex:1 1 0;margin:0 32px;justify-content:flex-start;overflow:auto;width:0;height:42px;scrollbar-width:none!important}.simple-home .categories .header .tabs::-webkit-scrollbar{height:0!important;width:0!important}.simple-home .categories .header .tabs .tab{transition:none;margin-right:24px}.simple-home .categories .area-header{grid-area:header;display:flex;align-items:center;justify-content:flex-start;font-weight:700;font-size:11pt;padding-bottom:12px;margin:0;height:20px;box-sizing:content-box}.simple-home .categories .area-header::before{content:"";display:inline-flex;height:10px;width:10px;background-color:var(--theme-color);border-radius:50%;margin-right:8px}.simple-home .categories .category-content{margin-top:12px;margin-bottom:36px}.simple-home .categories .category-content-enter,.simple-home .categories .category-content-leave-to{opacity:0}`,"simple-home-categories-style");const o={anime:"动画",bangumi:"番剧",china:"国创",music:"音乐",dance:"舞蹈",game:"游戏",knowledge:"知识",tech:"科技",life:"生活",food:"美食",animal:"动物圈",kichiku:"鬼畜",fashion:"时尚",information:"资讯",entertainment:"娱乐",movie:"影视",tv:"TV剧",film:"放映厅",documentary:"纪录片"};return{export:Object.assign({template:r},{components:{Icon:()=>t.importAsync("icon.vue"),NormalCategory:()=>t.importAsync("simple-home-normal-category.vue"),BangumiCategory:()=>t.importAsync("simple-home-bangumi-category.vue")},data(){let t=e.simpleHomeCategoryOrders;const r=Object.values(t);const i=r.some((e=>e===null||e===undefined||Number.isNaN(e)));const s=_.uniq(r).length!==r.length;if(i||s){e.simpleHomeCategoryOrders=simpleHomeCategoryDefaultOrders;t=simpleHomeCategoryDefaultOrders}return{tabs:Object.entries(o).map((([e,t])=>({key:e,name:t}))),selectedTab:Object.entries(t).sort(((e,t)=>e[1]-t[1]))[0][0],reordering:false,reorder:null,regionCodes:null,regionLinks:null}},async mounted(){this.checkAds();const r=this.$refs.reorderContainer;const{RegionCodes:o,RegionLinks:i}=await t.importAsync("category-regions");this.regionCodes=o;this.regionLinks=i;const{Reorder:s}=await t.importAsync("reorder");const a=new s(r);this.reorder=a;a.addEventListener("reorder",(t=>{const r=t.detail;for(const t of r){const{element:r,order:o}=t;e.simpleHomeCategoryOrders[r.getAttribute("data-key")]=o}e.simpleHomeCategoryOrders=e.simpleHomeCategoryOrders}))},methods:{getOrder(t){return e.simpleHomeCategoryOrders[t]},checkAds(){if("ads"in e.simpleHomeCategoryOrders){e.simpleHomeCategoryOrders.information=e.simpleHomeCategoryOrders.ads;delete e.simpleHomeCategoryOrders.ads;e.simpleHomeCategoryOrders=e.simpleHomeCategoryOrders}},selectTab(e){if(this.reordering){return}if(this.selectedTab===e.key&&this.regionLinks){const t=this.regionLinks[e.key];window.open(`https://www.bilibili.com/${t}`,"_blank")}else{this.selectedTab=e.key}}},computed:{content(){if(["bangumi","china"].includes(this.selectedTab)){return"BangumiCategory"}else if(this.selectedTab==="manga"){return null}else if(this.selectedTab==="column"){return null}else{return"NormalCategory"}},rid(){if(!this.regionCodes){return-1}else{return this.regionCodes[this.selectedTab]}}}})}})();