(async () => { const html = await import("aboutHtml"); document.body.insertAdjacentHTML("beforeend", html); document.querySelector(".bilibili-evolved-about").addEventListener("be:load", () => { const nameSorter = (a, b) => a.charCodeAt(0) - b.charCodeAt(0); const userSorter = (a, b) => nameSorter(a.name, b.name); const clientType = GM_info.script.name.match(/Bilibili Evolved \((.*)\)/)[1]; new Vue({ el: ".bilibili-evolved-about", data: { version: settings.currentVersion, clientType, branch: /Preview|Local/.test(clientType) ? "preview" : "master", authors: [ { name: "Grant Howard", link: "https://github.com/the1812", }, { name: "Coulomb-G", link: "https://github.com/Coulomb-G", }, ], contributors: [ { name: "PleiadeSubaru", link: "https://github.com/Etherrrr", }, ].sort(userSorter), fetching: true, participants: [], supporters: [ "*飞", "N*v", "*博睿", "*杨", "*泽鹏", ].sort(nameSorter), websites: [ { name: "GitHub", link: "https://github.com/the1812/Bilibili-Evolved/", }, { name: "Greasy Fork", link: "https://greasyfork.org/zh-CN/scripts/373563-bilibili-evolved", }, ], components: [ { name: "Vue.js", link: "https://cn.vuejs.org/index.html", }, { name: "JSZip", link: "https://stuk.github.io/jszip/", }, { name: "jQuery", link: "http://jquery.com/", }, { name: "debounce", link: "https://github.com/component/debounce/", }, ], }, mounted() { this.fetchParticipants(); }, methods: { async fetchParticipants() { const allParticipants = new Set(); let issues = []; let page = 1; do { issues = await Ajax.getJson(`https://api.github.com/repos/the1812/Bilibili-Evolved/issues?state=all&direction=asc&per_page=100&page=${page}`) .catch(() => { issues = [{ name: "电波无法到达(´・_・`)", link: null }]; }); page++; for (const issue of issues) { allParticipants.add(issue.user.login); } } while (issues.length > 0); this.participants = [...allParticipants].map(name => { return { name, link: `https://github.com/${name}`, }; }).filter(({ link }) => { return !this.authors.some(it => it.link === link) && !this.contributors.some(it => it.link === link); }).sort(userSorter); this.fetching = false; }, }, }); }, { once: true }); })();