SteamGridDB Cover Replacer
`)
const container = document.getElementById('sgdb-cover')
if (!Array.isArray(data)) {
getImages(data, container)
} else {
const titleMatch = data.find(item => item.name === groupName)
if (titleMatch) {
getImages(titleMatch, container)
return
}
data.forEach(item => {
const button = document.createElement('button')
button.textContent = item.name
button.type = 'button'
container.append(button)
button.addEventListener('click', () => {
container.querySelectorAll('button').forEach(button => button.remove())
getImages(item, container)
})
})
}
}
function getImages(item, container) {
GM_xmlhttpRequest({
url: `https://www.steamgriddb.com/api/v2/grids/game/${item.id}?types=static`,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_key}`
},
responseType: "json",
onload: response => loadImages(container, response)
})
}
function loadImages(container, response) {
if (!response.response.success) alert('SteamGridDB request failed')
if (response.response.data.length === 0) alert('No results')
const sorted = response.response.data.sort((a, b) => b.upvotes - a.upvotes)
for (let i = 0; i < Math.min(sorted.length, max_images); i++) {
const item = sorted[i]
new Promise(resolve => {
let img = new Image()
img.src = item.thumb
img.style.maxWidth = '300px'
img.style.maxHeight = '400px'
img.onload = () => resolve(img)
img.onerror = () => reject()
}).then(img => {
const div = document.createElement('div')
div.style.display = 'flex'
div.style.flexDirection = 'column'
div.style.marginLeft = '8px'
div.style.marginBottom = '4px'
div.style.alignItems = 'center'
container.append(div)
div.insertAdjacentHTML('beforeend', `