Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/99469776df3cb47fd9f6894e5312c8b2.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name GGn Screenshots Resolutions Checker
// @namespace none
// @version 2
// @description Helps check and fix unequal screenshots resolutions
// @author ingts
// @match https://gazellegames.net/torrents.php?id=*
// @match https://gazellegames.net/upload.php
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @downloadURL https://update.greasyfork.icu/scripts/479685/GGn%20Screenshots%20Resolutions%20Checker.user.js
// @updateURL https://update.greasyfork.icu/scripts/479685/GGn%20Screenshots%20Resolutions%20Checker.meta.js
// ==/UserScript==
const check_after_group_creation = true
const scroll_to_screenshots = true
const refresh_after_submit = false
const heading = document.querySelector('.screenshots_div > .head > strong')
function getImgUrl(imgElement) {
return imgElement.src.includes('postimg') ? new URL(imgElement.src).searchParams.get('i') : imgElement.src
}
function check(screenshots, status) {
const resolutions = Array.from(screenshots).map(img => `${img.naturalWidth}x${img.naturalHeight}`)
let freqMap = resolutions.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1
return acc
}, {})
let maxFreqElement = Object.keys(freqMap).reduce((max, cur) => freqMap[max] > freqMap[cur] ? max : cur)
let minorityIndexes = []
resolutions.forEach((val, index) => {
if (val !== maxFreqElement) {
minorityIndexes.push(index)
}
})
if (minorityIndexes.length === 0) {
status.style.color = 'lightgreen'
status.textContent = 'All same resolution'
return
}
status.style.color = 'red'
status.textContent = 'Not all same resolution'
screenshots.forEach((img, index) => {
img.style.width = `${img.width}px`
img.style.height = `${img.height}px`
img.style.removeProperty('max-width')
let imgParent = img.parentElement
imgParent.style.flex = '1'
const div = document.createElement('div')
Object.assign(div.style, {
display: 'flex',
flexDirection: 'column',
gap: '5px',
position: 'relative'
})
imgParent.before(div)
div.append(imgParent)
const input = document.createElement('input')
input.type = 'text'
input.onblur = () => {
if (input.value) {
input.value.replace(/(\.png|\.jpg|\.jpeg).*$/i, "$1") // remove text after extension
imageUpload(input.value, input) // ptpimg site function
}
}
const span = document.createElement('span')
span.textContent = `${img.naturalWidth}x${img.naturalHeight}`
Object.assign(span.style, {
position: 'absolute',
backgroundColor: 'rgb(0 0 0 / 70%)',
top: `${imgParent.offsetTop}px`,
left: `${imgParent.offsetLeft}px`,
})
if (minorityIndexes.includes(index)) {
input.style.backgroundColor = '#f17373'
span.style.color = '#f17373'
span.style.fontSize = '1.6em'
} else {
input.value = getImgUrl(img)
span.style.fontSize = '1.2em'
}
div.append(input)
img.before(span)
})
document.getElementById('group_screenshots').style.cssText = `
display: flex;
flex-wrap: wrap;
gap: 3px;
justify-content: center;`
document.querySelector('.screenshots_div > .body').insertAdjacentHTML("afterend", ``)
const submitBtn = document.getElementById('check-submit')
submitBtn.addEventListener("click", () => {
const body = new URLSearchParams(`action=takeimagesedit&groupid=${new URL(location.href).searchParams.get('id')}&categoryid=1&image=${getImgUrl(document.querySelector("#group_cover img"))}`)
const screens = Array.from(document.querySelectorAll('#group_screenshots input')).map(a => a.value).filter(Boolean)
screens.forEach(url => body.append('screens[]', url))
fetch('https://gazellegames.net/torrents.php', {
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: body
}).then(r => {
if (!r.redirected)
throw new Error()
submitBtn.value = 'Submitted'
submitBtn.disabled = true
if (refresh_after_submit)
location.reload()
}).catch(() => {
alert('Failed')
})
})
}
function main() {
const screenshots = document.querySelectorAll('#group_screenshots img')
let loadedImgs = 0
const status = document.createElement('span')
status.style.marginLeft = '2rem'
heading.after(status)
const loadingTimeout = setTimeout(() => {
status.style.color = '#FF8015'
status.textContent = 'Loading'
}, 800)
screenshots.forEach(img => {
if (img.complete) {
loadedImgs++
} else {
img.addEventListener('load', () => {
loadedImgs++
if (loadedImgs === screenshots.length) {
clearTimeout(loadingTimeout)
check(screenshots, status)
}
})
}
})
if (loadedImgs === screenshots.length) {
clearTimeout(loadingTimeout)
check(screenshots, status)
}
}
if (check_after_group_creation && location.href.endsWith('upload.php')) {
document.getElementById('upload_table').addEventListener('submit', () => {
GM_setValue('new', 1)
})
}
if (location.href.includes('torrents.php?id=') && document.getElementById('groupplatform')) {
if (GM_getValue('new', null)) {
main()
GM_deleteValue('new')
if (scroll_to_screenshots)
heading.parentElement.scrollIntoView()
} else {
const button = document.createElement('button')
button.style.marginLeft = '2rem'
button.textContent = 'Check Resolutions'
button.onclick = () => {
main()
button.remove()
}
heading.after(button)
}
}