mirror of
https://github.com/FAUSheppy/open-web-leaderboard.git
synced 2025-12-06 07:01:36 +01:00
266 lines
6.4 KiB
JavaScript
266 lines
6.4 KiB
JavaScript
positions = [ "Top", "Jungle", "Mid", "Support" , "Bottom" ]
|
|
acceptedParser = [ "top", "jungle", "mid", "sup" , "bot", "adc", "support", "bottom", "*" ]
|
|
sides = [ "left", "right"]
|
|
|
|
var checkPlayerFunc = function checkPlayer() {
|
|
if(this.value == ""){
|
|
return
|
|
}
|
|
url = "/player?id=" + this.value
|
|
fetch(url).then(r => {
|
|
if(r.status == 200){
|
|
this.style.background = "#74bb74"
|
|
}else{
|
|
//this.style.background = "#d25252"
|
|
}
|
|
})
|
|
}
|
|
|
|
var fastPosChangedFunc = function fastPosChanged() {
|
|
|
|
accepted = [ "top", "jungle", "mid", "sup" , "bot" ]
|
|
uniqArr = []
|
|
prioArray = [5, 5, 5, 5, 5]
|
|
|
|
/* commence cleanup */
|
|
clean = this.value.replaceAll(" ", "").toLocaleLowerCase()
|
|
clean = clean.replace("support", "sup")
|
|
clean = clean.replace("adc", "bot")
|
|
clean = clean.replace("bottom", "bot")
|
|
|
|
retVal = true
|
|
if(clean.includes("<")){
|
|
console.log("Not accepted (includes <)")
|
|
retVal = false
|
|
}
|
|
|
|
list = clean.split(">")
|
|
cur = 1
|
|
list.forEach(el => {
|
|
if(el.includes("=")){
|
|
listEq = el.split("=")
|
|
listEq.forEach(sub => {
|
|
if(accepted.includes(sub) && !uniqArr.includes(sub)){
|
|
prioArray[accepted.indexOf(sub)] = cur
|
|
uniqArr += [sub]
|
|
}else{
|
|
console.log("Not accepted (=): " + sub)
|
|
retVal = false
|
|
}
|
|
})
|
|
cur++
|
|
}else{
|
|
if(accepted.includes(el) && !uniqArr.includes(el)){
|
|
prioArray[accepted.indexOf(el)] = cur
|
|
uniqArr += [el]
|
|
cur++
|
|
}else{
|
|
console.log("Not accepted (>): " + el)
|
|
retVal = false
|
|
}
|
|
}
|
|
})
|
|
for(i = 0; i<5; i++){
|
|
arr = this.id.split("-")
|
|
pNr = arr[arr.length-1]
|
|
side = this.id.includes("left") ? "left" : "right"
|
|
|
|
roleSubmission = document.getElementById("fastpos-submission")
|
|
if(roleSubmission){
|
|
string = "prio_" + accepted[i]
|
|
}else {
|
|
string = "prio-" + side + "-" + accepted[i] + "-" + pNr
|
|
}
|
|
|
|
string = string.replace("top","Top")
|
|
string = string.replace("jungle","Jungle")
|
|
string = string.replace("mid","Mid")
|
|
string = string.replace("sup","Support")
|
|
string = string.replace("bot","Bottom")
|
|
|
|
selector = document.getElementById(string)
|
|
selector.value = prioArray[i]
|
|
selector.style.background = "lightblue"
|
|
}
|
|
|
|
/* allow some basic shit */
|
|
if(clean == "*" || clean == ""){
|
|
retVal = true
|
|
}
|
|
|
|
if(retVal){
|
|
this.style.background = "#74bb74"
|
|
}else{
|
|
this.style.background = "#d25252"
|
|
}
|
|
}
|
|
|
|
function balance(){
|
|
|
|
cont = document.getElementById("response-container")
|
|
cont.innerHTML = ""
|
|
sides = ["left", "right"]
|
|
|
|
blue = [ "", "", "", "", ""]
|
|
red = [ "", "", "", "", ""]
|
|
|
|
dictToBeSorted = {
|
|
0 : [],
|
|
1 : [],
|
|
2 : [],
|
|
3 : [],
|
|
4 : []
|
|
}
|
|
filler = []
|
|
impossible = []
|
|
|
|
dictAll = {}
|
|
for(sid = 0; sid < 2; sid++){
|
|
for(id = 0; id < 5; id++){
|
|
|
|
var pname = "undef"
|
|
var prioList = [5, 5, 5, 5, 5]
|
|
|
|
stringPid = `playername-${sides[sid]}-${id}`
|
|
pnameObj = document.getElementById(stringPid)
|
|
pname = pnameObj.value
|
|
for(acc = 0; acc < 5; acc++){
|
|
stringSelectorId = `prio-${sides[sid]}-${positions[acc]}-${id}`
|
|
selObj = document.getElementById(stringSelectorId)
|
|
prioList[acc] = selObj.value
|
|
}
|
|
|
|
dictAll[pname] = prioList
|
|
|
|
}
|
|
}
|
|
|
|
jsonData = JSON.stringify(dictAll, null, 4);
|
|
|
|
/* transmitt */
|
|
spinner = document.getElementById("loading")
|
|
spinner.style.display = "block";
|
|
fetch(window.location.href, {
|
|
method: 'post',
|
|
headers: {
|
|
'Accept': 'application/json, text/plain, */*',
|
|
'Content-Type': 'application/json' },
|
|
body: jsonData
|
|
}).then(r => r.json()).then(j => {
|
|
spinner.style.display = "none";
|
|
cont.innerHTML = j["content"]
|
|
})
|
|
|
|
}
|
|
|
|
function parseMultiline(){
|
|
|
|
var names = []
|
|
var prioStrings = []
|
|
|
|
field = document.getElementById("multi-line-copy")
|
|
lines = field.value.split("\n")
|
|
lines.forEach(l => {
|
|
|
|
lowestIndex = 100
|
|
|
|
acceptedParser.forEach( p => {
|
|
i = l.indexOf(" " + p)
|
|
if(i >= 3 && i < lowestIndex){
|
|
lowestIndex = i
|
|
}
|
|
})
|
|
|
|
if(lowestIndex != 100){
|
|
name = l.substring(0, lowestIndex)
|
|
prioStr = l.substring(lowestIndex)
|
|
names.push(name)
|
|
prioStrings.push(prioStr)
|
|
}
|
|
})
|
|
|
|
count = 0
|
|
sides.forEach(s => {
|
|
for(i = 0; i<5; i++){
|
|
|
|
pObjField = document.getElementById("playername-" + s + "-" + i)
|
|
prObjField = document.getElementById("check-" + s + "-fastpos-" + i)
|
|
|
|
if(count >= names.length){
|
|
pObjField.value = ""
|
|
prObjField.value = ""
|
|
}else{
|
|
pObjField.value = names[count]
|
|
prObjField.value = prioStrings[count]
|
|
}
|
|
|
|
count++;
|
|
}
|
|
})
|
|
|
|
const focusEvent = new Event("focus")
|
|
fastPosFields.forEach(el => el.dispatchEvent(focusEvent))
|
|
balance()
|
|
}
|
|
|
|
function queryForPlayerData(){
|
|
ident = document.getElementById("ident-field").innerHTML
|
|
fetch("/balance-tool-data?id=" + ident).then(r => r.json()).then(j => {
|
|
if("no-data" in j){
|
|
return
|
|
}
|
|
j["submissions"].forEach(el => {
|
|
console.log(el)
|
|
breakToSubmissions = false
|
|
for(sid = 0; sid < 2; sid++){
|
|
if(breakToSubmissions){
|
|
break;
|
|
}
|
|
for(id = 0; id < 5; id++){
|
|
stringPid = `playername-${sides[sid]}-${id}`
|
|
pnameObj = document.getElementById(stringPid)
|
|
if(pnameObj.value == "" || pnameObj.value == el["name"]){
|
|
pnameObj.value = el["name"]
|
|
for(acc = 0; acc < 5; acc++){
|
|
stringSelectorId = `prio-${sides[sid]}-${positions[acc]}-${id}`
|
|
selObj = document.getElementById(stringSelectorId)
|
|
selObj.value = el[positions[acc]]
|
|
}
|
|
breakToSubmissions = true
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
function copy() {
|
|
|
|
ident = document.getElementById("ident-field").innerHTML
|
|
path = "/role-submission?id="
|
|
copyText = window.location.protocol + window.location.hostname + path + ident
|
|
|
|
navigator.clipboard.writeText(copyText)
|
|
document.getElementById("copyLink").innerHTML = "Copied!"
|
|
setTimeout(() => {
|
|
document.getElementById("copyLink").innerHTML = "Copy Submission Link" }, 500);
|
|
|
|
}
|
|
|
|
fastPosFields = document.getElementsByClassName("fastpos")
|
|
playerNameFields = document.getElementsByClassName("pname")
|
|
|
|
playerNameFields.forEach(el => el.addEventListener('input', checkPlayerFunc));
|
|
playerNameFields.forEach(el => el.addEventListener('focus', checkPlayerFunc));
|
|
|
|
fastPosFields.forEach(el => el.addEventListener('input', fastPosChangedFunc));
|
|
//fastPosFields.forEach(el => el.addEventListener('focus', fastPosChangedFunc));
|
|
|
|
fastposSubmission = document.getElementById("fastpos-submission")
|
|
if(fastposSubmission){
|
|
fastposSubmission.addEventListener("input", fastPosChangedFunc)
|
|
fastposSubmission.addEventListener("focus", fastPosChangedFunc)
|
|
}
|
|
setInterval(queryForPlayerData(), 3000)
|