Attempt at forcing Save dialog on preset backup.

Random BG image replaced by holiday BG.
This commit is contained in:
Blaž Kristan 2021-07-15 09:24:10 +02:00
parent c1a1fb8d87
commit dbd3bd50df
6 changed files with 834 additions and 825 deletions

View File

@ -156,7 +156,7 @@ function loadBg(iUrl)
let bg = document.getElementById('bg');
let img = document.createElement("img");
img.src = iUrl;
if (iUrl == "") {
if (iUrl == "" || iUrl === "https://picsum.photos/1920/1080") {
var today = new Date();
for (var i=0; i<hol.length; i++) {
var yr = hol[i][0]==0 ? today.getFullYear() : hol[i][0];

View File

@ -35,15 +35,15 @@
x.style.animation = 'none';
timeout = setTimeout(function(){ x.className = x.className.replace("show", ""); }, 2900);
}
function uploadFile(name) {
function uploadFile(fO,name) {
var req = new XMLHttpRequest();
req.addEventListener('load', function(){showToast(this.responseText)});
req.addEventListener('error', function(e){showToast(e.stack,true);});
req.open("POST", "/upload");
var formData = new FormData();
formData.append("data", d.Sf.data.files[0], name);
formData.append("data", fO.files[0], name);
req.send(formData);
d.Sf.data.value = '';
fO.value = '';
return false;
}
function GetV()
@ -74,8 +74,8 @@
All settings and presets will be erased.<br><br>
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
<hr>
<a class="btn" href="/presets.json" target="_blank">Backup presets</a><br>
<div id="presets">Restore presets:<input type="file" name="data" accept=".json"> <input type="button" value="Upload" onclick="uploadFile('/presets.json');"><br></div>
<a class="btn" href="/presets.json?download" target="download-frame">Backup presets</a><br>
<div id="presets">Restore presets:<input type="file" name="data" accept=".json"> <input type="button" value="Upload" onclick="uploadFile(d.Sf.data,'/presets.json');"><br></div>
<hr>
<h3>Software Update</h3>
<button type="button" onclick="U()">Manual OTA Update</button><br>
@ -90,5 +90,6 @@
<div id="toast"></div>
<button type="button" onclick="B()">Back</button><button type="submit">Save & Reboot</button>
</form>
<iframe name=download-frame style='display:none;'></iframe>
</body>
</html>

View File

@ -376,7 +376,10 @@ void updateFSInfo() {
//Un-comment any file types you need
String getContentType(AsyncWebServerRequest* request, String filename){
if(request->hasArg("download")) return "application/octet-stream";
if(request->hasArg("download")) {
request->addHeader(F("Content-Disposition"), F("Attachment"));
return "application/octet-stream";
}
else if(filename.endsWith(".htm")) return "text/html";
else if(filename.endsWith(".html")) return "text/html";
else if(filename.endsWith(".css")) return "text/css";

View File

@ -377,7 +377,7 @@ type="button" onclick="B()">Back</button><button type="submit">Save</button>
// Autogenerated from wled00/data/settings_sec.htm, do not edit!!
const char PAGE_settings_sec[] PROGMEM = R"=====(<!DOCTYPE html><html lang="en"><head><meta name="viewport" content="width=500">
<meta charset="utf-8"><title>Misc Settings</title><script>
var timeout,d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#security-settings")}function B(){window.open("/settings","_self")}function U(){window.open("/update","_self")}function gId(t){return d.getElementById(t)}function isObject(t){return t&&"object"==typeof t&&!Array.isArray(t)}function showToast(t,e=!1){var n=gId("toast");n.innerHTML=t,n.className=e?"error":"show",clearTimeout(timeout),n.style.animation="none",timeout=setTimeout((function(){n.className=n.className.replace("show","")}),2900)}function uploadFile(t){var e=new XMLHttpRequest;e.addEventListener("load",(function(){showToast(this.responseText)})),e.addEventListener("error",(function(t){showToast(t.stack,!0)})),e.open("POST","/upload");var n=new FormData;return n.append("data",d.Sf.data.files[0],t),e.send(n),d.Sf.data.value="",!1}function GetV() {var d=document;
var timeout,d=document;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#security-settings")}function B(){window.open("/settings","_self")}function U(){window.open("/update","_self")}function gId(t){return d.getElementById(t)}function isObject(t){return t&&"object"==typeof t&&!Array.isArray(t)}function showToast(t,e=!1){var n=gId("toast");n.innerHTML=t,n.className=e?"error":"show",clearTimeout(timeout),n.style.animation="none",timeout=setTimeout((function(){n.className=n.className.replace("show","")}),2900)}function uploadFile(t,e){var n=new XMLHttpRequest;n.addEventListener("load",(function(){showToast(this.responseText)})),n.addEventListener("error",(function(t){showToast(t.stack,!0)})),n.open("POST","/upload");var o=new FormData;return o.append("data",t.files[0],e),n.send(o),t.value="",!1}function GetV() {var d=document;
%CSS%%SCSS%<link href="/skin.css"
rel="stylesheet"></head><body onload="GetV()"><form id="form_s" name="Sf"
method="post"><div class="toprow"><div class="helpB"><button type="button"
@ -394,13 +394,14 @@ Disable OTA when not in use, otherwise an attacker can reflash device software!
<br><br>Factory reset: <input type="checkbox" name="RS"><br>
All settings and presets will be erased.<br><br>
HTTP traffic is unencrypted. An attacker in the same network can intercept form data!
<hr><a class="btn" href="/presets.json" target="_blank">Backup presets</a><br>
<div id="presets">Restore presets:<input type="file" name="data" accept=".json">
<input type="button" value="Upload" onclick='uploadFile("/presets.json")'><br>
</div><hr><h3>Software Update</h3><button type="button" onclick="U()">
Manual OTA Update</button><br>Enable ArduinoOTA: <input type="checkbox"
name="AO"><br><h3>About</h3><a href="https://github.com/Aircoookie/WLED/"
target="_blank">WLED</a> version 0.13.0-bl2<br><br><a
<hr><a class="btn" href="/presets.json?download" target="download-frame">
Backup presets</a><br><div id="presets">Restore presets:<input type="file"
name="data" accept=".json"> <input type="button" value="Upload"
onclick='uploadFile(d.Sf.data,"/presets.json")'><br></div><hr><h3>
Software Update</h3><button type="button" onclick="U()">Manual OTA Update
</button><br>Enable ArduinoOTA: <input type="checkbox" name="AO"><br><h3>About
</h3><a href="https://github.com/Aircoookie/WLED/" target="_blank">WLED</a>
version 0.13.0-bl2<br><br><a
href="https://github.com/Aircoookie/WLED/wiki/Contributors-and-credits"
target="_blank">Contributors, dependencies and special thanks</a><br>
A huge thank you to everyone who helped me create WLED!<br><br>
@ -408,7 +409,8 @@ A huge thank you to everyone who helped me create WLED!<br><br>
href="https://github.com/Aircoookie/WLED/blob/master/LICENSE" target="_blank">
MIT license</a></i><br><br>Server message: <span class="sip">Response error!
</span><hr><div id="toast"></div><button type="button" onclick="B()">Back
</button><button type="submit">Save & Reboot</button></form></body></html>)=====";
</button><button type="submit">Save & Reboot</button></form><iframe
name="download-frame" style="display:none"></iframe></body></html>)=====";
// Autogenerated from wled00/data/settings_um.htm, do not edit!!

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2107141
#define VERSION 2107151
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG