Skip to content

Commit dc2a636

Browse files
committed
Add SWGoH Asset downloads to portrait maker
1 parent d6795c6 commit dc2a636

3 files changed

Lines changed: 113 additions & 2 deletions

File tree

site/src/portraitMaker.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const urlInput = document.getElementById('urlInput');
1010
const loadUrlBtn = document.getElementById('loadUrlBtn');
1111
const discordIdInput = document.getElementById('discordIdInput');
1212
const loadDiscordBtn = document.getElementById('loadDiscordBtn');
13+
const loadSwgohAsset = document.getElementById("loadSwgohAsset");
14+
const loadSwgohAssetBtn = document.getElementById("loadSwgohAssetBtn");
1315

1416
function isTrueWebKit() {
1517
const ua = navigator.userAgent;
@@ -45,6 +47,92 @@ Object.entries(unwantedEntries).forEach(([key, valuesToRemove]) => {
4547
}
4648
});
4749

50+
let assetVersionPromise;
51+
52+
async function GetAssetVersionGithub() {
53+
// this function is slightly stolen from swgoh-ae2
54+
55+
if (!assetVersionPromise) {
56+
assetVersionPromise = (async () => {
57+
const versionGetterUrl = "https://raw.githubusercontent.com/swgoh-utils/gamedata/refs/heads/main/meta.json";
58+
59+
const versionResponse = await fetch(versionGetterUrl);
60+
61+
if (versionResponse.status === 200) {
62+
const metaDataShort = await versionResponse.json();
63+
const versionResult = metaDataShort.data.assetVersion;
64+
65+
console.log("Found AssetVersion:", versionResult);
66+
67+
return versionResult;
68+
}
69+
70+
console.error("Failed to get github version");
71+
throw new Error("Failed to fetch asset version");
72+
})();
73+
}
74+
75+
return assetVersionPromise;
76+
}
77+
78+
const __assetVersion = await GetAssetVersionGithub();
79+
80+
const swgohAssetExtractor = "https://legofan-swgoh-ae2.onrender.com";
81+
82+
async function wakeAE() {
83+
const assetVersion = await GetAssetVersionGithub();
84+
fetch(`${swgohAssetExtractor}/Asset/list?version=${assetVersion}`);
85+
}
86+
87+
wakeAE();
88+
setTimeout(wakeAE, 300000);
89+
90+
let loadSwgohAssetLoaded = false;
91+
loadSwgohAsset.addEventListener("focus", async () => {
92+
if (loadSwgohAssetLoaded) {
93+
return;
94+
}
95+
96+
loadSwgohAsset.innerHTML = "";
97+
98+
const loadOption = document.createElement("option");
99+
loadOption.value = "loading...";
100+
loadOption.textContent = "loading...";
101+
loadSwgohAsset.appendChild(loadOption);
102+
103+
const assetVersion = await GetAssetVersionGithub();
104+
105+
const response = await fetch(`${swgohAssetExtractor}/Asset/list?version=${assetVersion}`);
106+
const data = await response.json()
107+
108+
loadSwgohAsset.innerHTML = "";
109+
110+
data.forEach(item => {
111+
const option = document.createElement("option");
112+
option.value = item;
113+
option.textContent = item;
114+
loadSwgohAsset.appendChild(option);
115+
});
116+
});
117+
118+
loadSwgohAssetBtn.addEventListener('click', async () => {
119+
const selectedAsset = loadSwgohAsset.options[loadSwgohAsset.selectedIndex].text;
120+
121+
const assetVersion = await GetAssetVersionGithub();
122+
123+
const response = await fetch(`${swgohAssetExtractor}/Asset/single?version=${assetVersion}&assetName=${selectedAsset}`);
124+
if (!response.ok) {
125+
console.error("Failed to fetch asset")
126+
}
127+
128+
const blob = await response.blob()
129+
const reader = new FileReader();
130+
reader.onload = function (event) {
131+
userImageDataURL = event.target.result;
132+
};
133+
reader.readAsDataURL(blob);
134+
});
135+
48136
uploadInput.addEventListener('change', (e) => {
49137
const file = e.target.files[0];
50138
if (!file) return;
@@ -580,6 +668,7 @@ function setupHelpTooltip(btnId, tooltipId) {
580668
}
581669
setupHelpTooltip('discordHelpBtn', 'discordHelpTooltip');
582670
setupHelpTooltip('urlHelpBtn', 'urlHelpTooltip');
671+
setupHelpTooltip('swgohAssethelpBtn', 'swgohAssetHelpTooltip');
583672

584673
function showErrorPopup(message) {
585674
document.getElementById('popupMessage').textContent = message;

site/swgoh-portrait-maker/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,19 @@ <h1 class="uploadText">Upload Your Image Here:</h1>
3232
<input type="file" id="upload" accept="image/*">
3333
</div>
3434
<div style="height: 10px;"></div>
35+
<div>
36+
<label for="loadSwgohAsset" class="input-labels" style="margin-right: 7px;">SWGoH Asset:</label>
37+
<span class="input-image">
38+
<select id="loadSwgohAsset">
39+
<option>Click to load options...</option>
40+
</select>
41+
<button id="swgohAssethelpBtn" class="help-btn" type="button" tabindex="0">?</button>
42+
<span class="help-tooltip" id="swgohAssetHelpTooltip" style="display:none;">
43+
Download a SWGoH Asset. Limited, may be slow.
44+
</span>
45+
</span>
46+
<button id="loadSwgohAssetBtn">Load SWGoH Asset</button>
47+
</div>
3548
<div>
3649
<label for="urlInput" class="input-labels">Image URL:</label>
3750
<span class="input-image">

site/swgoh-portrait-maker/style.css

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ canvas.loaded {
5656
#downloadLinkM,
5757
#generateButton,
5858
#resetPos,
59+
#loadSwgohAssetBtn,
5960
.file-upload,
6061
.termsButton {
6162
display: inline-block;
@@ -79,6 +80,7 @@ canvas.loaded {
7980
#resetPos:hover,
8081
.file-upload:hover,
8182
.gl-checkbox-label:hover,
83+
#loadSwgohAssetBtn:hover,
8284
.termsButton:hover {
8385
box-shadow: 0 0 0 2px black;
8486
background-color: #0056b3
@@ -633,14 +635,16 @@ canvas.loaded {
633635
}
634636

635637
.input-image input[type="text"],
636-
.input-image input[type="number"] {
638+
.input-image input[type="number"],
639+
.input-image select {
637640
width: 100%;
638641
box-sizing: border-box;
639642
}
640643
}
641644

642645
.input-image input[type="text"],
643-
.input-image input[type="number"] {
646+
.input-image input[type="number"],
647+
.input-image select {
644648
padding: 10px 14px;
645649
border: 2px solid #007BFF;
646650
border-radius: 6px;
@@ -653,6 +657,11 @@ canvas.loaded {
653657
margin: 6px 0;
654658
}
655659

660+
.input-image select {
661+
width: 225.6px;
662+
height: 41.6px;
663+
}
664+
656665
input[type="text"]:focus,
657666
input[type="number"]:focus {
658667
border-color: #0056b3;

0 commit comments

Comments
 (0)