mirror of
https://git.mirrors.martin98.com/https://github.com/luc-github/ESP3D.git
synced 2025-08-03 17:40:41 +08:00

Add Wsocket message when upload is cancelled and so no info is sent to give root cause, need latest WebUI for catching these message On embedded unlike in 3.0 websocket is not setup so only use the xnlhttp.onerror change embeded version to 1.3.1 change version to 34 update npm when building embedded page to be sure environment is properly set
281 lines
11 KiB
JavaScript
281 lines
11 KiB
JavaScript
var currentpath = "/";
|
|
function navbar(){
|
|
var content="<table><tr>";
|
|
var tlist = currentpath.split("/");
|
|
var path="/";
|
|
var nb = 1;
|
|
content+="<td class='btnimg' onclick=\"currentpath='/'; SendCommand('list','all');\">/</td>";
|
|
while (nb < (tlist.length-1))
|
|
{
|
|
path+=tlist[nb] + "/";
|
|
content+="<td class='btnimg' onclick=\"currentpath='"+path+"'; SendCommand('list','all');\">"+tlist[nb] +"</td><td>/</td>";
|
|
nb++;
|
|
}
|
|
content+="</tr></table>";
|
|
return content;
|
|
}
|
|
function trash_icon(){
|
|
var content ="<svg width='24' height='24' viewBox='0 0 128 128'>";
|
|
content +="<rect x='52' y='12' rx='6' ry='6' width='25' height='7' style='fill:red;' />";
|
|
content +="<rect x='52' y='16' width='25' height='2' style='fill:white;' />";
|
|
content +="<rect x='30' y='18' rx='6' ry='6' width='67' height='100' style='fill:red;' />";
|
|
content +="<rect x='20' y='18' rx='10' ry='10' width='87' height='14' style='fill:red;' />";
|
|
content +="<rect x='20' y='29' width='87' height='3' style='fill:white;' />";
|
|
content +="<rect x='40' y='43' rx='7' ry='7' width='7' height='63' style='fill:white;' />";
|
|
content +="<rect x='60' y='43' rx='7' ry='7' width='7' height='63' style='fill:white;' />";
|
|
content +="<rect x='80' y='43' rx='7' ry='7' width='7' height='63' style='fill:white;' /></svg>";
|
|
return content;
|
|
}
|
|
function back_icon(){
|
|
var content ="<svg width='24' height='24' viewBox='0 0 24 24'><path d='M7,3 L2,8 L7,13 L7,10 L17,10 L18,11 L18,15 L17,16 L10,16 L9,17 L9,19 L10,20 L20,20 L22,18 L22,8 L20,6 L7,6 z' stroke='black' fill='white' /></svg>";
|
|
return content;
|
|
}
|
|
function select_dir(directoryname){
|
|
currentpath+=directoryname + "/";
|
|
SendCommand('list','all');
|
|
}
|
|
function compareStrings(a, b) {
|
|
// case-insensitive comparison
|
|
a = a.toLowerCase();
|
|
b = b.toLowerCase();
|
|
return (a < b) ? -1 : (a > b) ? 1 : 0;
|
|
}
|
|
function dispatchfilestatus(jsonresponse)
|
|
{
|
|
var content ="";
|
|
var display_message = false;
|
|
content =" Status: "+jsonresponse.status;
|
|
content +=" | Total space: "+jsonresponse.total;
|
|
content +=" | Used space: "+jsonresponse.used;
|
|
content +=" | Occupation: ";
|
|
content +="<meter min='0' max='100' high='90' value='"+jsonresponse.occupation +"'></meter> "+jsonresponse.occupation +"%";
|
|
document.getElementById('status').innerHTML=content;
|
|
content ="";
|
|
if (currentpath!="/")
|
|
{
|
|
var pos = currentpath.lastIndexOf("/",currentpath.length-2);
|
|
var previouspath = currentpath.slice(0,pos+1);
|
|
content +="<tr style='cursor:hand;' onclick=\"currentpath='"+previouspath+"'; SendCommand('list','all');\"><td >"+back_icon()+"</td><td colspan='4'> Up..</td></tr>";
|
|
}
|
|
if (currentpath=="/") {
|
|
display_message = true;
|
|
}
|
|
jsonresponse.files.sort(function(a, b) {
|
|
return compareStrings(a.name, b.name);
|
|
});
|
|
for (var i1=0;i1 <jsonresponse.files.length;i1++){
|
|
//first display files
|
|
if (String(jsonresponse.files[i1].size) != "-1")
|
|
{
|
|
content +="<TR>";
|
|
content +="<td><svg height='24' width='24' viewBox='0 0 24 24' > <path d='M1,2 L1,21 L2,22 L16,22 L17,21 L17,6 L12,6 L12,1 L2,1 z' stroke='black' fill='white' /><line x1='12' y1='1' x2='17' y2='6' stroke='black' stroke-width='1'/>";
|
|
content +="<line x1='5' y1='10' x2='13' y2='10' stroke='black' stroke-width='1'/> <line x1='5' y1='14' x2='13' y2='14' stroke='black' stroke-width='1'/> <line x1='5' y1='18' x2='13' y2='18' stroke='black' stroke-width='1'/></svg></td>";
|
|
content +="<TD class='btnimg' style=\"padding:0px;\"><a href=\""+jsonresponse.path+jsonresponse.files[i1].name+"\" target=_blank><div class=\"blacklink\">";
|
|
content +=jsonresponse.files[i1].name;
|
|
if ((jsonresponse.files[i1].name == "index.html.gz")||(jsonresponse.files[i1].name == "index.html")){
|
|
display_message = false;
|
|
}
|
|
content +="</div></a></TD><TD>";
|
|
content +=jsonresponse.files[i1].size;
|
|
content +="</TD><TD width='0%'><div class=\"btnimg\" onclick=\"Delete('"+jsonresponse.files[i1].name+"')\">";
|
|
content +=trash_icon();
|
|
content +="</div></TD><td></td></TR>";
|
|
}
|
|
}
|
|
//then display directories
|
|
for (var i2=0;i2 <jsonresponse.files.length;i2++){
|
|
if (String(jsonresponse.files[i2].size) == "-1")
|
|
{
|
|
content +="<TR>";
|
|
content+="<td><svg height='24' width='24' viewBox='0 0 24 24' ><path d='M19,11 L19,8 L18,7 L8,7 L8,5 L7,4 L2,4 L1,5 L1,22 L19,22 L20,21 L23,11 L5,11 L2,21 L1,22' stroke='black' fill='white' /></svg></td>";
|
|
content +="<TD class='btnimg blacklink' style='padding:10px 15px;' onclick=\"select_dir('" + jsonresponse.files[i2].name+"');\">";
|
|
content +=jsonresponse.files[i2].name;
|
|
content +="</TD><TD>";
|
|
content +="</TD><TD width='0%'><div class=\"btnimg\" onclick=\"Deletedir('"+jsonresponse.files[i2].name+"')\">";
|
|
content +=trash_icon();
|
|
content +="</div></TD><td></td></TR>";
|
|
}
|
|
}
|
|
if (display_message) {
|
|
|
|
document.getElementById('MSG').innerHTML = "File index.html.gz is missing, please upload it";
|
|
} else {
|
|
document.getElementById('MSG').innerHTML = "<a href='/' class= 'btn btn-primary'>Go to ESP3D interface</a>";
|
|
}
|
|
|
|
document.getElementById('file_list').innerHTML=content;
|
|
document.getElementById('path').innerHTML=navbar();}
|
|
function Delete(filename){
|
|
if (confirm("Confirm deletion of file: " + filename))SendCommand("delete",filename);
|
|
}
|
|
function Deletedir(filename){
|
|
if (confirm("Confirm deletion of directory: " + filename))SendCommand("deletedir",filename);
|
|
}
|
|
function Createdir(){
|
|
var filename = prompt("Please enter directory name", "");
|
|
if (filename != null) {
|
|
SendCommand("createdir",filename.trim());
|
|
}
|
|
}
|
|
function SendCommand(action,filename){
|
|
var xmlhttp = new XMLHttpRequest();
|
|
var url = "/files?action="+action;
|
|
url += "&filename="+encodeURI(filename);
|
|
url += "&path="+encodeURI(currentpath);
|
|
document.getElementById('loader').style.visibility="visible";
|
|
xmlhttp.onreadystatechange = function() {
|
|
if (xmlhttp.readyState == 4 ) {
|
|
if(xmlhttp.status == 200) {
|
|
var jsonresponse = JSON.parse(xmlhttp.responseText);
|
|
document.getElementById('loader').style.visibility="hidden";
|
|
dispatchfilestatus(jsonresponse);}
|
|
else SubmitRequest ();
|
|
}
|
|
};
|
|
xmlhttp.open("GET", url, true);
|
|
xmlhttp.send();
|
|
}
|
|
function Sendfile(){
|
|
var files = document.getElementById('file-select').files;
|
|
if (files.length==0)return;
|
|
document.getElementById('upload-button').value = "Uploading...";
|
|
document.getElementById('prg').style.visibility = "visible";
|
|
var formData = new FormData();
|
|
formData.append('path', currentpath);
|
|
for (var i3 = 0; i3 < files.length; i3++) {
|
|
var file = files[i3];
|
|
var arg = currentpath + file.name + "S";
|
|
//append file size first to check updload is complete
|
|
formData.append(arg, file.size);
|
|
formData.append('myfiles[]', file, currentpath+file.name);}
|
|
var xmlhttp = new XMLHttpRequest();
|
|
xmlhttp.open('POST', '/files', true);
|
|
//progress upload event
|
|
xmlhttp.upload.addEventListener("progress", updateProgress, false);
|
|
//progress function
|
|
function updateProgress (oEvent) {
|
|
if (oEvent.lengthComputable) {
|
|
var percentComplete = (oEvent.loaded / oEvent.total)*100;
|
|
document.getElementById('prg').value=percentComplete;
|
|
document.getElementById('upload-button').value = "Uploading ..." + percentComplete.toFixed(0)+"%" ;
|
|
} else {
|
|
// Impossible because size is unknown
|
|
}
|
|
};
|
|
xmlhttp.onerror = function () {
|
|
document.getElementById('upload-button').value = 'Upload';
|
|
document.getElementById('prg').style.visibility = "hidden";
|
|
document.getElementById('file-select').value="";
|
|
document.getElementById('status').innerHTML="Status: Upload failed"
|
|
alert("Upload file failed");
|
|
};
|
|
|
|
xmlhttp.onload = function () {
|
|
if (xmlhttp.status === 200) {
|
|
document.getElementById('upload-button').value = 'Upload';
|
|
document.getElementById('prg').style.visibility = "hidden";
|
|
document.getElementById('file-select').value="";
|
|
var jsonresponse = JSON.parse(xmlhttp.responseText);
|
|
dispatchfilestatus(jsonresponse);
|
|
} else alert('An error occurred!');
|
|
};
|
|
xmlhttp.send(formData);
|
|
}
|
|
|
|
window.onload = function() {
|
|
SendCommand('list','all');
|
|
};
|
|
function Uploadfile(){
|
|
if (!confirm("Confirm Firmware Update ?"))return;
|
|
var files = document.getElementById('fw-select').files;
|
|
if (files.length==0)return;
|
|
document.getElementById('uploadfw-button').style.visibility = 'hidden';
|
|
document.getElementById('fw-select').style.visibility = 'hidden';
|
|
document.getElementById('MSG').innerHTML="";
|
|
document.getElementById('SPIFFS').style.display = "none";
|
|
document.getElementById('prgfw').style.visibility = "visible";
|
|
var formData = new FormData();
|
|
for (var i4 = 0; i4 < files.length; i4++) {
|
|
var file = files[i4];
|
|
var arg = "/" + file.name + "S";
|
|
//append file size first to check updload is complete
|
|
formData.append(arg, file.size);
|
|
formData.append('myfile[]', file, "/"+file.name);}
|
|
var xmlhttp = new XMLHttpRequest();
|
|
xmlhttp.open('POST', '/updatefw', true);
|
|
//progress upload event
|
|
xmlhttp.upload.addEventListener("progress", updateProgress, false);
|
|
//progress function
|
|
function updateProgress (oEvent) {
|
|
if (oEvent.lengthComputable) {
|
|
var percentComplete = (oEvent.loaded / oEvent.total)*100;
|
|
document.getElementById('prgfw').value=percentComplete;
|
|
document.getElementById('MSG').innerHTML = "Uploading ..." + percentComplete.toFixed(0)+"%" ;
|
|
} else {
|
|
// Impossible because size is unknown
|
|
}
|
|
}
|
|
xmlhttp.onerror = function () {
|
|
alert("Upload file failed");
|
|
location.reload();
|
|
};
|
|
xmlhttp.onload = function () {
|
|
if (xmlhttp.status === 200) {
|
|
document.getElementById('uploadfw-button').value = 'Upload';
|
|
document.getElementById('MSG').innerHTML="Restarting, please wait....";
|
|
document.getElementById('counter').style.visibility = "visible";
|
|
document.getElementById('uploadfw-button').style.visibility = 'hidden';
|
|
document.getElementById('uploadfw-button').style.width = '0px';
|
|
document.getElementById('fw-select').value="";
|
|
document.getElementById('fw-select').style.visibility = 'hidden';
|
|
document.getElementById('fw-select').style.width = '0px';
|
|
|
|
var jsonresponse = JSON.parse(xmlhttp.responseText);
|
|
if (jsonresponse.status=='1' || jsonresponse.status=='4' || jsonresponse.status=='1')alert("Update failed");
|
|
if (jsonresponse.status=='2')alert('Update canceled!');
|
|
else if (jsonresponse.status=='3')
|
|
{
|
|
var i5 = 0;
|
|
var interval;
|
|
var x = document.getElementById("prgfw");
|
|
x.max=40;
|
|
interval = setInterval(function(){
|
|
i5=i5+1;
|
|
var x = document.getElementById("prgfw");
|
|
x.value=i5;
|
|
var st = 41-i5;
|
|
st = st + " seconds";
|
|
document.getElementById('counter').innerHTML=st;
|
|
if (i5>40)
|
|
{
|
|
clearInterval(interval);
|
|
location.reload();
|
|
}
|
|
},1000);
|
|
}
|
|
else alert('Update failed!');
|
|
} else alert('An error occurred!');
|
|
};
|
|
xmlhttp.send(formData);
|
|
}
|
|
|
|
function RequestLogin(){
|
|
document.getElementById('loader').style.visibility="hidden";
|
|
document.getElementById('loginpage').style.display='block';
|
|
}
|
|
|
|
function SubmitRequest (){
|
|
document.getElementById('loginpage').style.display='none';
|
|
var user = document.getElementById('login_user_text').value.trim();
|
|
var password = document.getElementById('login_password_text').value.trim();
|
|
var url = "/login?USER="+encodeURIComponent(user) + "&PASSWORD=" + encodeURIComponent(password) + "&SUBMIT=yes" ;
|
|
var xmlhttp = new XMLHttpRequest();
|
|
xmlhttp.onreadystatechange = function() {
|
|
if (xmlhttp.readyState == 4 && xmlhttp.status != 200) {
|
|
RequestLogin();
|
|
}
|
|
};
|
|
xmlhttp.open("GET", url, true);
|
|
xmlhttp.send();
|
|
}
|