ScloudjsGUI / src /script.js
soiz1's picture
Migrated from GitHub
5147be7 verified
let info={username:"",projectid:"",}
const loginfunc = async()=>{
await fetch("./html/login.html").then(res=>res.text()).then(res=>{document.body.getElementsByTagName("div")[0].innerHTML=res});
const loginbox = document.getElementById("loginbox");
const loginstatus = document.getElementsByClassName("box")[2];
const loginbutton = loginstatus.getElementsByClassName("loginbutton")[0];
loginbutton.addEventListener("click",()=>{
const username = loginbox.getElementsByClassName("username")[0].value;
info.username=username;
const password = loginbox.getElementsByClassName("password")[0].value;
loginstatus.getElementsByClassName("status")[0].innerText = "logging in...";
fetch("/login",{
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify({username:username,password:password}),
}).then(res=>{
if(res.status==200){
loginstatus.getElementsByClassName("status")[0].innerText = "Login succeeded! Connecting to the cloud server...";
cloudfunc();
}else{
loginstatus.getElementsByClassName("status")[0].innerText = "try again";
setTimeout(() => {
loginstatus.getElementsByClassName("status")[0].innerText = null;
}, 2000);
}
})
})
}
loginfunc();
const cloudfunc = async ()=>{
await fetch("/connect");
await fetch("./html/cloud.html").then(res=>res.text()).then(res=>{document.getElementsByTagName("div")[0].innerHTML=res});
const util = document.getElementsByClassName("util")[0];
const table = document.getElementsByClassName("table")[0];
const changes = document.getElementsByClassName("changes")[0].getElementsByTagName("p");
const changeval = document.getElementsByClassName("changeval")[0];
const pconnect = document.getElementsByClassName("projectconnect")[0];
const changevals = {
choice:changeval.getElementsByClassName("choice")[0],
input:changeval.getElementsByClassName("projectid")[0],
button:changeval.getElementsByClassName("button")[0],
};
changes[0].getElementsByTagName("span")[0].innerHTML=`<a href ="https://scratch.mit.edu/users/${info.username}/">${info.username}</a>`;
const projectconnect = {
input:pconnect.getElementsByClassName("projectid")[0],
button:pconnect.getElementsByClassName("projectbutton")[0]
};
projectconnect.input.addEventListener("change",()=>{
projectconnect.input.value=projectconnect.input.value.match(/[0-9]/g).toString().replace(/,/g,"");;
});
projectconnect.button.addEventListener("click",()=>{
if(projectconnect.input.value !==""){
info.projectid = projectconnect.input.value;
fetch("/handshake",{
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify({projectid:info.projectid}),
}).then(()=>{
changes[1].getElementsByTagName("span")[0].innerHTML=`<a href ="https://scratch.mit.edu/projects/${info.projectid}/">https://scratch.mit.edu/projects/${info.projectid}/</a>`;
const ws = new WebSocket('ws://localhost:3001');
ws.onmessage=e=>{
const data = JSON.parse(e.data);
const clouddatas = data.clouddatas;
const changedlists = data.changedlists;
const cloudkeys = Object.keys(clouddatas);
let str=`<tr class="title"><th>variable names</th><th>value</th></tr>`;
let str2="";
for(c of cloudkeys){
str = str+`<tr class="${c}"><td>${c}</td><td>${clouddatas[c].value}</td></tr>`;
str2=str2+`<option value="${c}">${c}</option>`
}
table.getElementsByTagName("table")[0].innerHTML=str;
changevals.choice.innerHTML=str2;
changes[2].getElementsByTagName("span").innerText=changedlists.toString();
}
})
}
})
changevals.input.addEventListener("change",()=>{
changevals.input.value=changevals.input.value.match(/[0-9]/g).toString().replace(/,/g,"");
});
changevals.button.addEventListener("click",()=>{
fetch("/change",{
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify({name:changevals.choice.value,value:changevals.input.value}),
}).then(res=>{
table.getElementsByTagName("table")[0].getElementsByClassName(changevals.choice.value)[0].getElementsByTagName("td")[1].innerText=changevals.input.value;
})
})
}