var currentpath = "/"; function navbar(){ var content=""; var tlist = currentpath.split("/"); var path="/"; var nb = 1; content+=""; while (nb < (tlist.length-1)) { path+=tlist[nb] + "/"; content+=""; nb++; } content+="
/"+tlist[nb] +"/
"; return content; } function trash_icon(){ var content =""; content +=""; content +=""; content +=""; content +=""; content +=""; content +=""; content +=""; content +=""; return content; } function back_icon(){ var content =""; 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 +=" "+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 +=""+back_icon()+" Up.."; } if (currentpath=="/") { display_message = true; } jsonresponse.files.sort(function(a, b) { return compareStrings(a.name, b.name); }); for (var i1=0;i1
"; content +=jsonresponse.files[i1].name; if ((jsonresponse.files[i1].name == "index.html.gz")||(jsonresponse.files[i1].name == "index.html")){ display_message = false; } content +="
"; content +=jsonresponse.files[i1].size; content +="
"; content +=trash_icon(); content +="
"; } } //then display directories for (var i2=0;i2 "; content +=jsonresponse.files[i2].name; content +=""; content +="
"; content +=trash_icon(); content +="
"; } } if (display_message) { document.getElementById('MSG').innerHTML = "File index.html.gz is missing, please upload it"; } else { document.getElementById('MSG').innerHTML = "Go to ESP3D interface"; } 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.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.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(); }