-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
108 lines (83 loc) · 3.75 KB
/
index.js
File metadata and controls
108 lines (83 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
var select_menus = {}
async function onReady() {
const response = await fetch(LASTEST_RELEASE_URL);
let data = await response.json();
document.getElementById("mod-version").innerText = "Version " + data["tag_name"];
setupSelectMenus();
let assets_menu = select_menus[document.getElementById("assets-menu")];
let asset_links = await loadAssetItems(assets_menu);
assets_menu.list.callSelectItem(assets_menu.list.e_items[0]);
let download_button = document.getElementById("download-button");
download_button.addEventListener("click", (e) => {downloadAsset(assets_menu.getSelected(), asset_links)});
await setupDownloadBar();
}
async function setupDownloadBar() {
let ceiling = document.getElementById("download-ceiling");
let floor = document.getElementById("download-floor");
let download_completion = document.getElementById("download-completion");
let download_description = document.getElementById("download-description");
let total_downloads = await get_github_downloads();
total_downloads += await get_modrinth_downloads();
total_downloads += await get_curseforge_downloads();
let download_level = downloadLevel(total_downloads);
let percentage = (total_downloads - download_level.floor)/download_level.factor * 100;
download_completion.style.width = percentage + "%";
floor.innerText = download_level.floor;
ceiling.innerText = download_level.ceiling;
download_description.innerText = total_downloads + " (" + percentage.toPrecision(3) + "%)";
}
async function loadAssetItems(assets_menu) {
let asset_links = {}
let data = await download_release_data();
let assets = data["assets"];
let assets_to_download = {};
for (const asset of assets) {
let name = asset["name"];
if (name.includes("source")) continue;
let parts = name.replace(".jar", "").split("-");
let mc_version = parts[1].replace("mc", "");
mc_version = mc_version.split(".").map(n => +n+100000).join(".");
assets_to_download[mc_version] = asset;
}
let assets_to_download_keys = Object.keys(assets_to_download);
assets_to_download_keys.sort();
for (var i = 0; i < assets_to_download_keys.length; i++) {
let key = assets_to_download_keys[i];
let asset = assets_to_download[key];
let id = "asset-" + asset["id"];
let parts = asset["name"].replace(".jar", "").split("-");
let mc_version = parts[1];
asset_links[id] = asset["browser_download_url"];
assets_menu.addItem(mc_version.replace("mc", "mc "), id);
}
return asset_links;
}
function getAssetParts(name) {
return name.replace(".jar", "").split("-");
}
function downloadAsset(item_selected, asset_links) {
let item_id = item_selected.id;
let url = asset_links[item_id];
if (url) {
window.open(url);
}
}
function setupSelectMenus() {
//- Add listeners to all select-button divs
var e_select_menus = document.getElementsByClassName("select-menu");
for (const e_select_menu of e_select_menus) {
select_menus[e_select_menu] = new SelectMenu(e_select_menu);
}
}
function downloadLevel(total_downloads) {
var length = total_downloads.toString().length;
var factor = Math.pow(10, length-2);
var floor = Math.floor(total_downloads / factor) * factor;
return {"floor": floor, "factor": factor, "ceiling": floor + factor};
}
async function loadDiscordPresenceCount() {
const discordResponse = await fetch("https://discord.com/api/guilds/1094713373758865449/widget.json");
const discordData = await discordResponse.json();
element = document.getElementById("discord-presence-count");
element.innerText = discordData["presence_count"] + " online";
}