kopia lustrzana https://github.com/Aircoookie/WLED
				
				
				
			GZIPped UI & settings pages.
settings.js for pasting data into HTML. Reduced simple & classic flash footprint. Split iro.js and rangetouch.js into separate requests (instead of embedding)pull/2737/head
							rodzic
							
								
									44f9bc5f0e
								
							
						
					
					
						commit
						f45b5da71a
					
				
							
								
								
									
										120
									
								
								tools/cdata.js
								
								
								
								
							
							
						
						
									
										120
									
								
								tools/cdata.js
								
								
								
								
							| 
						 | 
				
			
			@ -113,7 +113,7 @@ function writeHtmlGzipped(sourceFile, resultFile, page) {
 | 
			
		|||
  console.info("Reading " + sourceFile);
 | 
			
		||||
  new inliner(sourceFile, function (error, html) {
 | 
			
		||||
    console.info("Inlined " + html.length + " characters");
 | 
			
		||||
    html = filter(html.replace("</head>","<script src=\"iro.js\"></script><script src=\"rangetouch.js\"></script></head>"), "html-minify-ui");
 | 
			
		||||
    html = filter(html/*.replace("</head>","<script src=\"iro.js\"></script><script src=\"rangetouch.js\"></script></head>")*/, "html-minify-ui");
 | 
			
		||||
    console.info("Minified to " + html.length + " characters");
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +164,8 @@ const char ${s.name}[] PROGMEM = R"${s.prepend || ""}${filter(str, s.filter)}${
 | 
			
		|||
    return s.mangle ? s.mangle(chunk) : chunk;
 | 
			
		||||
  } else if (s.method == "gzip") {
 | 
			
		||||
    const buf = fs.readFileSync(srcDir + "/" + s.file);
 | 
			
		||||
    const str = buf.toString('utf-8');
 | 
			
		||||
    var str = buf.toString('utf-8');
 | 
			
		||||
    if (s.mangle) str = s.mangle(str);
 | 
			
		||||
    const zip = zlib.gzipSync(filter(str, s.filter), { level: zlib.constants.Z_BEST_COMPRESSION });
 | 
			
		||||
    const result = hexdump(zip.toString('hex'), true);
 | 
			
		||||
    const chunk = `
 | 
			
		||||
| 
						 | 
				
			
			@ -253,8 +254,11 @@ writeChunks(
 | 
			
		|||
      name: "PAGE_settingsCss",
 | 
			
		||||
      prepend: "=====(<style>",
 | 
			
		||||
      append: "</style>)=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "css-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace("%%","%")
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings.htm",
 | 
			
		||||
| 
						 | 
				
			
			@ -263,140 +267,134 @@ writeChunks(
 | 
			
		|||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace("%", "%%")
 | 
			
		||||
          .replace(/User Interface\<\/button\>\<\/form\>/gms, "User Interface\<\/button\>\<\/form\>%DMXMENU%"),
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_wifi.htm",
 | 
			
		||||
      name: "PAGE_settings_wifi",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          ),
 | 
			
		||||
            "</script><script src=\"settings.js?p=1\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_leds.htm",
 | 
			
		||||
      name: "PAGE_settings_leds",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          ),
 | 
			
		||||
            "</script><script src=\"settings.js?p=2\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_dmx.htm",
 | 
			
		||||
      name: "PAGE_settings_dmx",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) => {
 | 
			
		||||
        const nocss = str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          );
 | 
			
		||||
        return `
 | 
			
		||||
#ifdef WLED_ENABLE_DMX
 | 
			
		||||
${nocss}
 | 
			
		||||
#else
 | 
			
		||||
const char PAGE_settings_dmx[] PROGMEM = R"=====()=====";
 | 
			
		||||
#endif
 | 
			
		||||
`;
 | 
			
		||||
      },
 | 
			
		||||
            "</script><script src=\"settings.js?p=7\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_ui.htm",
 | 
			
		||||
      name: "PAGE_settings_ui",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          ),
 | 
			
		||||
            "</script><script src=\"settings.js?p=3\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_sync.htm",
 | 
			
		||||
      name: "PAGE_settings_sync",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(/function GetV().*\<\/script\>/gms, "function GetV() {\n"),
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "</script><script src=\"settings.js?p=4\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_time.htm",
 | 
			
		||||
      name: "PAGE_settings_time",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(/function GetV().*\<\/script\>/gms, "function GetV() {\n"),
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "</script><script src=\"settings.js?p=5\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_sec.htm",
 | 
			
		||||
      name: "PAGE_settings_sec",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          ),
 | 
			
		||||
            "</script><script src=\"settings.js?p=6\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      file: "settings_um.htm",
 | 
			
		||||
      name: "PAGE_settings_um",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str
 | 
			
		||||
          .replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          .replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          //.replace(/\<link rel="stylesheet".*\>/gms, "")
 | 
			
		||||
          //.replace(/\<style\>.*\<\/style\>/gms, "%CSS%%SCSS%")
 | 
			
		||||
          .replace(
 | 
			
		||||
            /function GetV().*\<\/script\>/gms,
 | 
			
		||||
            "function GetV() {var d=document;\n"
 | 
			
		||||
          ),
 | 
			
		||||
            "</script><script src=\"settings.js?p=8\"></script>"
 | 
			
		||||
          )
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "wled00/html_settings.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -410,7 +408,7 @@ writeChunks(
 | 
			
		|||
      name: "PAGE_usermod",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
      mangle: (str) =>
 | 
			
		||||
        str.replace(/fetch\("http\:\/\/.*\/win/gms, 'fetch("/win'),
 | 
			
		||||
| 
						 | 
				
			
			@ -444,7 +442,7 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
      name: "PAGE_update",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -452,7 +450,7 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
      name: "PAGE_welcome",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -460,7 +458,7 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
      name: "PAGE_liveview",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +466,7 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
      name: "PAGE_liveviewws",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -476,7 +474,7 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
      name: "PAGE_404",
 | 
			
		||||
      prepend: "=====(",
 | 
			
		||||
      append: ")=====",
 | 
			
		||||
      method: "plaintext",
 | 
			
		||||
      method: "gzip",
 | 
			
		||||
      filter: "html-minify",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,12 +7,39 @@
 | 
			
		|||
	<meta content="yes" name="apple-mobile-web-app-capable">
 | 
			
		||||
	<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAGACGAAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAE1JREFUOI1j/P//PwOxgNGeAUMxE9G6cQCKDWAhpADZ2f8PMjBS3QW08QK20KaZC2gfC9hCnqouoNgARgY7zMxAyNlUdQHlXiAlO2MDAD63EVqNHAe0AAAAAElFTkSuQmCC"/>
 | 
			
		||||
	<title>WLED</title>
 | 
			
		||||
	<script>function feedback(){}</script>
 | 
			
		||||
	<script>
 | 
			
		||||
	function feedback(){}
 | 
			
		||||
	var h  = document.getElementsByTagName('head')[0];
 | 
			
		||||
	var l  = document.createElement('script');
 | 
			
		||||
	l.type = 'application/javascript';
 | 
			
		||||
	l.src = 'iro.js';
 | 
			
		||||
	l.addEventListener('load', (e) => {
 | 
			
		||||
		cpick = new iro.ColorPicker("#picker", {
 | 
			
		||||
			width: 260,
 | 
			
		||||
			wheelLightness: false,
 | 
			
		||||
			wheelAngle: 270,
 | 
			
		||||
			wheelDirection: "clockwise",
 | 
			
		||||
			layout: [{
 | 
			
		||||
				component: iro.ui.Wheel,
 | 
			
		||||
				options: {}
 | 
			
		||||
			}]
 | 
			
		||||
		});
 | 
			
		||||
		cpick.on("input:end", () => {setColor(1);});
 | 
			
		||||
		cpick.on("color:change", () => {updatePSliders()});
 | 
			
		||||
		var l  = document.createElement('script');
 | 
			
		||||
		l.type = 'application/javascript';
 | 
			
		||||
		l.src = 'rangetouch.js';
 | 
			
		||||
		l.addEventListener('load', (e) => {
 | 
			
		||||
			ranges = RangeTouch.setup('input[type="range"]', {});
 | 
			
		||||
			onLoad();
 | 
			
		||||
		});
 | 
			
		||||
		setTimeout(function(){h.appendChild(l)},150);
 | 
			
		||||
	});
 | 
			
		||||
	h.appendChild(l);
 | 
			
		||||
	</script>
 | 
			
		||||
	<link rel="stylesheet" href="index.css">
 | 
			
		||||
	<script src="iro.js"></script>
 | 
			
		||||
	<script src="rangetouch.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body onload="onLoad()">
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div id="cv" class="overlay">Loading WLED UI...</div>
 | 
			
		||||
<noscript><div class="overlay" style="opacity:1;">Sorry, WLED UI needs JavaScript!</div></noscript>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,14 +18,13 @@ var segCount = 0, ledCount = 0, lowestUnused = 0, maxSeg = 0, lSeg = 0;
 | 
			
		|||
var pcMode = false, pcModeA = false, lastw = 0;
 | 
			
		||||
var tr = 7;
 | 
			
		||||
var d = document;
 | 
			
		||||
const ranges = RangeTouch.setup('input[type="range"]', {});
 | 
			
		||||
var palettesData;
 | 
			
		||||
var fxdata = [];
 | 
			
		||||
var pJson = {}, eJson = {}, lJson = {};
 | 
			
		||||
var pN = "", pI = 0, pNum = 0;
 | 
			
		||||
var pmt = 1, pmtLS = 0, pmtLast = 0;
 | 
			
		||||
var lastinfo = {};
 | 
			
		||||
var ws;
 | 
			
		||||
var ws, cpick, ranges;
 | 
			
		||||
var cfg = {
 | 
			
		||||
	theme:{base:"dark", bg:{url:""}, alpha:{bg:0.6,tab:0.8}, color:{bg:""}},
 | 
			
		||||
	comp :{colors:{picker: true, rgb: false, quick: true, hex: false},
 | 
			
		||||
| 
						 | 
				
			
			@ -39,17 +38,6 @@ var hol = [
 | 
			
		|||
	[2024,2,31,2,"https://aircoookie.github.io/easter.png"]
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
var cpick = new iro.ColorPicker("#picker", {
 | 
			
		||||
	width: 260,
 | 
			
		||||
	wheelLightness: false,
 | 
			
		||||
	wheelAngle: 270,
 | 
			
		||||
	wheelDirection: "clockwise",
 | 
			
		||||
	layout: [{
 | 
			
		||||
		component: iro.ui.Wheel,
 | 
			
		||||
		options: {}
 | 
			
		||||
    }]
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function handleVisibilityChange() {if (!d.hidden && new Date () - lastUpdate > 3000) requestJson();}
 | 
			
		||||
function sCol(na, col) {d.documentElement.style.setProperty(na, col);}
 | 
			
		||||
function gId(c) {return d.getElementById(c);}
 | 
			
		||||
| 
						 | 
				
			
			@ -232,10 +220,6 @@ function onLoad()
 | 
			
		|||
	for (var i = 0; i < cd.length; i++) cd[i].style.backgroundColor = "rgb(0, 0, 0)";
 | 
			
		||||
	selectSlot(0);
 | 
			
		||||
	updateTablinks(0);
 | 
			
		||||
	cpick.on("input:end", function() {
 | 
			
		||||
		setColor(1);
 | 
			
		||||
	});
 | 
			
		||||
	cpick.on("color:change", updatePSliders);
 | 
			
		||||
	pmtLS = localStorage.getItem('wledPmt');
 | 
			
		||||
 | 
			
		||||
	// Load initial data
 | 
			
		||||
| 
						 | 
				
			
			@ -244,7 +228,6 @@ function onLoad()
 | 
			
		|||
		loadFX(()=>{
 | 
			
		||||
			loadFXData();
 | 
			
		||||
			loadPresets(()=>{
 | 
			
		||||
				//if (isObj(lastinfo) && isEmpty(lastinfo)) loadInfo(requestJson);	// if not filled by WS
 | 
			
		||||
				requestJson();
 | 
			
		||||
			});
 | 
			
		||||
		});
 | 
			
		||||
| 
						 | 
				
			
			@ -602,41 +585,7 @@ function parseInfo() {
 | 
			
		|||
	pmt         = li.fs.pmt;
 | 
			
		||||
	cct         = li.leds.cct;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function loadInfo(callback=null)
 | 
			
		||||
{
 | 
			
		||||
	var url = (loc?`http://${locip}`:'') + '/json/info';
 | 
			
		||||
	var useWs = (ws && ws.readyState === WebSocket.OPEN);
 | 
			
		||||
	if (useWs) {
 | 
			
		||||
		ws.send('{"v":true}');
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	fetch(url, {
 | 
			
		||||
		method: 'get'
 | 
			
		||||
	})
 | 
			
		||||
	.then(res => {
 | 
			
		||||
		if (!res.ok) showToast('Could not load Info!', true);
 | 
			
		||||
		return res.json();
 | 
			
		||||
	})
 | 
			
		||||
	.then(json => {
 | 
			
		||||
		clearErrorToast();
 | 
			
		||||
		lastinfo = json;
 | 
			
		||||
		parseInfo();
 | 
			
		||||
		showNodes();
 | 
			
		||||
		if (isInfo) populateInfo(json);
 | 
			
		||||
		reqsLegal = true;
 | 
			
		||||
		if (!ws && lastinfo.ws > -1) setTimeout(makeWS,500);
 | 
			
		||||
	})
 | 
			
		||||
	.catch(function (error) {
 | 
			
		||||
		showToast(error, true);
 | 
			
		||||
		console.log(error);
 | 
			
		||||
	})
 | 
			
		||||
	.finally(()=>{
 | 
			
		||||
		if (callback) callback();
 | 
			
		||||
		updateUI();
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function populateInfo(i)
 | 
			
		||||
{
 | 
			
		||||
	var cn="";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@
 | 
			
		|||
			border-radius: var(--h);
 | 
			
		||||
			font-size: 6vmin;
 | 
			
		||||
			height: var(--h);
 | 
			
		||||
			width: calc(100% - 40px);
 | 
			
		||||
			width: calc(100%% - 40px);
 | 
			
		||||
			margin-top: 2vh;
 | 
			
		||||
		}
 | 
			
		||||
	</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +31,7 @@
 | 
			
		|||
<form action="/settings/wifi"><button type="submit">WiFi Setup</button></form>
 | 
			
		||||
<form action="/settings/leds"><button type="submit">LED Preferences</button></form>
 | 
			
		||||
<form action="/settings/ui"><button type="submit">User Interface</button></form>
 | 
			
		||||
%DMXMENU%<!--form action="/settings/dmx"><button type="submit">DMX Output</button></form-->
 | 
			
		||||
<form action="/settings/sync"><button type="submit">Sync Interfaces</button></form>
 | 
			
		||||
<form action="/settings/time"><button type="submit">Time & Macros</button></form>
 | 
			
		||||
<form action="/settings/um"><button type="submit">Usermods</button></form>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ function mMap(){
 | 
			
		|||
function S(){GCH(15);GetV();mMap();}function H(){window.open("https://github.com/Aircoookie/WLED/wiki/DMX");}function B(){window.history.back();}
 | 
			
		||||
function GetV(){}
 | 
			
		||||
</script>
 | 
			
		||||
<style>@import url("/style.css");</style>
 | 
			
		||||
<style>@import url("style.css");</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body onload="S()">
 | 
			
		||||
<form id="form_s" name="Sf" method="post">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,6 @@
 | 
			
		|||
      if (bquot > 100) {var msg = "Too many LEDs for me to handle!"; if (maxM < 10000) msg += "\n\rConsider using an ESP32."; alert(msg);}
 | 
			
		||||
      if (d.Sf.checkValidity()) d.Sf.submit(); //https://stackoverflow.com/q/37323914
 | 
			
		||||
    }
 | 
			
		||||
		function S(){GetV();checkSi();setABL();}
 | 
			
		||||
    function enABL()
 | 
			
		||||
    {
 | 
			
		||||
      var en = gId('able').checked;
 | 
			
		||||
| 
						 | 
				
			
			@ -451,6 +450,7 @@ ${i+1}:
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
		function S(){GetV();checkSi();setABL();}
 | 
			
		||||
		function GetV()
 | 
			
		||||
		{
 | 
			
		||||
      //values injected by server while sending HTML
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ function SetVal(){switch(parseInt(d.Sf.EP.value)){case 5568: d.Sf.DI.value = 556
 | 
			
		|||
function S(){GetV();SetVal();}
 | 
			
		||||
function GetV(){var d=document;}
 | 
			
		||||
</script>
 | 
			
		||||
<style>@import url("/style.css");</style>
 | 
			
		||||
<style>@import url("style.css");</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body onload="S()">
 | 
			
		||||
<form id="form_s" name="Sf" method="post" onsubmit="GC()">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,7 +97,7 @@
 | 
			
		|||
		//values injected by server while sending HTML
 | 
			
		||||
	}
 | 
			
		||||
	</script>
 | 
			
		||||
	<style>@import url("/style.css");</style>
 | 
			
		||||
	<style>@import url("style.css");</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body onload="S()">
 | 
			
		||||
	<form id="form_s" name="Sf" method="post" onsubmit="Wd()">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,7 +133,7 @@
 | 
			
		|||
    }
 | 
			
		||||
    function GetV() {}
 | 
			
		||||
    </script>
 | 
			
		||||
    <style>@import url("/style.css");</style>
 | 
			
		||||
    <style>@import url("style.css");</style>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body onload="S()">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
			//values injected by server while sending HTML
 | 
			
		||||
		}
 | 
			
		||||
	</script>
 | 
			
		||||
	<style>@import url("/style.css");</style>
 | 
			
		||||
	<style>@import url("style.css");</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body onload="GetV()">
 | 
			
		||||
	<form id="form_s" name="Sf" method="post">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@ body {
 | 
			
		|||
  text-align: center;
 | 
			
		||||
  background: #222;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  line-height: 200%%; /* %% because of AsyncWebServer */
 | 
			
		||||
  line-height: 200%; /* %% because of AsyncWebServer */
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
hr {
 | 
			
		||||
| 
						 | 
				
			
			@ -109,9 +109,9 @@ td {
 | 
			
		|||
	position: fixed;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	z-index: 5;
 | 
			
		||||
	transform: translateX(-50%%); /* %% because of AsyncWebServer */
 | 
			
		||||
  max-width: 90%%; /* %% because of AsyncWebServer */
 | 
			
		||||
	left: 50%%; /* %% because of AsyncWebServer */
 | 
			
		||||
	transform: translateX(-50%); /* %% because of AsyncWebServer */
 | 
			
		||||
  max-width: 90%; /* %% because of AsyncWebServer */
 | 
			
		||||
	left: 50%; /* %% because of AsyncWebServer */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#toast.show {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -324,6 +324,7 @@ void serveMessage(AsyncWebServerRequest* request, uint16_t code, const String& h
 | 
			
		|||
String settingsProcessor(const String& var);
 | 
			
		||||
String dmxProcessor(const String& var);
 | 
			
		||||
void serveSettings(AsyncWebServerRequest* request, bool post = false);
 | 
			
		||||
void serveSettingsJS(AsyncWebServerRequest* request);
 | 
			
		||||
 | 
			
		||||
//ws.cpp
 | 
			
		||||
void handleWs();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,15 @@
 | 
			
		|||
 */ 
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/usermod.htm, do not edit!!
 | 
			
		||||
const char PAGE_usermod[] PROGMEM = R"=====(<!DOCTYPE html><html><body>No usermod custom web page set.</body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_usermod_length = 81;
 | 
			
		||||
const uint8_t PAGE_usermod[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xb3, 0x51, 0x74, 0xf1, 0x77, 0x0e,
 | 
			
		||||
  0x89, 0x0c, 0x70, 0x55, 0xc8, 0x28, 0xc9, 0xcd, 0xb1, 0xb3, 0x81, 0x90, 0x49, 0xf9, 0x29, 0x95,
 | 
			
		||||
  0x76, 0x7e, 0xf9, 0x0a, 0xa5, 0xc5, 0xa9, 0x45, 0xb9, 0xf9, 0x29, 0x0a, 0xc9, 0xa5, 0xc5, 0x25,
 | 
			
		||||
  0xf9, 0xb9, 0x0a, 0xe5, 0xa9, 0x49, 0x0a, 0x05, 0x89, 0xe9, 0xa9, 0x0a, 0xc5, 0xa9, 0x25, 0x7a,
 | 
			
		||||
  0x36, 0xfa, 0x60, 0x55, 0x36, 0xfa, 0x60, 0x2d, 0x00, 0x1e, 0x93, 0x65, 0xc7, 0x48, 0x00, 0x00,
 | 
			
		||||
  0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/msg.htm, do not edit!!
 | 
			
		||||
| 
						 | 
				
			
			@ -35,70 +43,308 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()=====";
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/update.htm, do not edit!!
 | 
			
		||||
const char PAGE_update[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta content="width=device-width" name="viewport">
 | 
			
		||||
<title>WLED Update</title><script>
 | 
			
		||||
function B(){window.history.back()}function U(){document.getElementById("uf").style.display="none",document.getElementById("msg").style.display="block"}
 | 
			
		||||
</script><style>
 | 
			
		||||
.bt{background:#333;color:#fff;font-family:Verdana,sans-serif;border:.3ch solid #333;display:inline-block;font-size:20px;margin:8px;margin-top:12px}input[type=file]{font-size:16px}body{font-family:Verdana,sans-serif;text-align:center;background:#222;color:#fff;line-height:200%}#msg{display:none}
 | 
			
		||||
</style></head><body><h2>WLED Software Update</h2><form method="POST" 
 | 
			
		||||
action="/update" id="uf" enctype="multipart/form-data" onsubmit="U()">
 | 
			
		||||
Installed version: 0.13.1-bl5<br>Download the latest binary: <a 
 | 
			
		||||
href="https://github.com/Aircoookie/WLED/releases" target="_blank"><img 
 | 
			
		||||
src="https://img.shields.io/github/release/Aircoookie/WLED.svg?style=flat-square">
 | 
			
		||||
</a><br><input type="file" class="bt" name="update" required><br><input 
 | 
			
		||||
type="submit" class="bt" value="Update!"><br><button type="button" class="bt" 
 | 
			
		||||
onclick="B()">Back</button></form><div id="msg"><b>Updating...</b><br>
 | 
			
		||||
Please do not close or refresh the page :)</div></body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_update_length = 734;
 | 
			
		||||
const uint8_t PAGE_update[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x85, 0x54, 0xef, 0x6b, 0xdc, 0x46,
 | 
			
		||||
  0x10, 0xfd, 0xae, 0xbf, 0x62, 0xb3, 0xa6, 0x60, 0x43, 0x4e, 0xb2, 0xef, 0x48, 0x29, 0x3a, 0x49,
 | 
			
		||||
  0xa5, 0xae, 0xfd, 0x21, 0x50, 0x88, 0x21, 0x49, 0x4b, 0x28, 0xa5, 0xac, 0xb4, 0x23, 0x69, 0xb8,
 | 
			
		||||
  0xd5, 0xae, 0xb2, 0x3b, 0xba, 0xf3, 0xf5, 0xf0, 0xff, 0x9e, 0xd1, 0xca, 0x76, 0x9c, 0x94, 0xd2,
 | 
			
		||||
  0x2f, 0x62, 0x7f, 0xcc, 0x7b, 0x33, 0xf3, 0xe6, 0xad, 0x8a, 0x57, 0x37, 0xef, 0x7e, 0xfd, 0xf0,
 | 
			
		||||
  0xe9, 0xee, 0x56, 0xf4, 0x34, 0x98, 0xaa, 0x78, 0xfc, 0x82, 0xd2, 0x55, 0x31, 0x00, 0x29, 0xd1,
 | 
			
		||||
  0x38, 0x4b, 0x60, 0xa9, 0x94, 0x07, 0xd4, 0xd4, 0x97, 0x1a, 0xf6, 0xd8, 0xc0, 0x2a, 0x6e, 0xa4,
 | 
			
		||||
  0xb0, 0x6a, 0x80, 0x52, 0xee, 0x11, 0x0e, 0xa3, 0xf3, 0x24, 0xab, 0xa4, 0x20, 0x24, 0x03, 0xd5,
 | 
			
		||||
  0x1f, 0xbf, 0xdd, 0xde, 0x88, 0x8f, 0xa3, 0x56, 0x04, 0x45, 0xb6, 0x1c, 0x15, 0xa1, 0xf1, 0x38,
 | 
			
		||||
  0x52, 0x95, 0xb4, 0x93, 0x6d, 0x08, 0x9d, 0x15, 0xd7, 0xe7, 0x17, 0xa7, 0x03, 0x5a, 0xed, 0x0e,
 | 
			
		||||
  0x69, 0x8f, 0x81, 0x9c, 0x3f, 0xa6, 0xb5, 0x6a, 0x76, 0xe7, 0x17, 0x0f, 0xcf, 0x21, 0x1f, 0x39,
 | 
			
		||||
  0x44, 0xbb, 0x66, 0x1a, 0xb8, 0x82, 0xb4, 0x03, 0xba, 0x35, 0x30, 0x2f, 0xaf, 0x8f, 0x6f, 0xf5,
 | 
			
		||||
  0xb9, 0x9c, 0x5a, 0x79, 0x91, 0x06, 0x3a, 0x1a, 0x48, 0x35, 0x86, 0xd1, 0xa8, 0x63, 0x29, 0xad,
 | 
			
		||||
  0xb3, 0x20, 0x5f, 0xff, 0x27, 0x64, 0x08, 0xdd, 0xbf, 0x31, 0xb5, 0x71, 0xcd, 0x4e, 0x3e, 0x24,
 | 
			
		||||
  0x45, 0xf6, 0x58, 0x62, 0x11, 0x03, 0xaa, 0x24, 0xad, 0xe9, 0x34, 0x57, 0xd4, 0x79, 0x37, 0x59,
 | 
			
		||||
  0x9d, 0x9f, 0x6d, 0x36, 0x9b, 0x6d, 0xe3, 0x8c, 0xf3, 0xf9, 0x59, 0xdb, 0xb6, 0xdb, 0x96, 0x95,
 | 
			
		||||
  0x59, 0xb5, 0x6a, 0x40, 0x73, 0xcc, 0x7f, 0x07, 0xaf, 0x95, 0x55, 0xaf, 0x83, 0xb2, 0x61, 0x15,
 | 
			
		||||
  0xc0, 0x63, 0xbb, 0xad, 0x9d, 0xd7, 0xe0, 0xf3, 0x74, 0xd3, 0xf4, 0x22, 0x38, 0x83, 0x5a, 0x44,
 | 
			
		||||
  0x82, 0xc7, 0xb4, 0x39, 0x5a, 0x83, 0x16, 0x56, 0x31, 0xf9, 0x42, 0x15, 0xf0, 0x1f, 0xc8, 0xd7,
 | 
			
		||||
  0x97, 0xe3, 0xfd, 0x76, 0x50, 0xbe, 0x43, 0x9b, 0xff, 0xf4, 0xbc, 0x5c, 0x91, 0x1b, 0xf3, 0xab,
 | 
			
		||||
  0xf5, 0x78, 0xff, 0x80, 0x76, 0x9c, 0xe8, 0x4f, 0x3a, 0x8e, 0x50, 0xb6, 0x68, 0xe0, 0xaf, 0xd3,
 | 
			
		||||
  0x57, 0xe8, 0xd5, 0x8f, 0x7c, 0x5f, 0x3b, 0x7d, 0x3c, 0xfd, 0x4f, 0x65, 0x04, 0xf7, 0xb4, 0x52,
 | 
			
		||||
  0x06, 0x3b, 0x9b, 0x37, 0x2c, 0x0d, 0xf8, 0xed, 0xcb, 0x2e, 0xd7, 0xeb, 0xf5, 0xcb, 0x2e, 0x63,
 | 
			
		||||
  0x95, 0x3d, 0x60, 0xd7, 0x13, 0x17, 0x77, 0xf9, 0xc3, 0xc3, 0x19, 0x8b, 0x78, 0x7a, 0xea, 0x62,
 | 
			
		||||
  0xd6, 0x3b, 0x2a, 0x17, 0x15, 0x2b, 0xb2, 0xc5, 0x38, 0x73, 0x11, 0x6c, 0xa2, 0xf5, 0xe2, 0x83,
 | 
			
		||||
  0xf7, 0xae, 0xa5, 0x83, 0xf2, 0xf0, 0x6c, 0x08, 0xbe, 0x28, 0x5a, 0xe7, 0x07, 0xc1, 0x06, 0xeb,
 | 
			
		||||
  0x9d, 0x2e, 0xe5, 0xdd, 0xbb, 0xf7, 0x1f, 0xa4, 0x48, 0x54, 0x1c, 0x7a, 0x29, 0xb3, 0x29, 0x06,
 | 
			
		||||
  0x4a, 0x81, 0x7c, 0xc7, 0x53, 0x16, 0xc0, 0x76, 0x98, 0x3b, 0x96, 0xc3, 0x64, 0x08, 0x47, 0xe5,
 | 
			
		||||
  0x29, 0x9b, 0xf1, 0x2b, 0x8e, 0x52, 0x52, 0x38, 0x1b, 0xa6, 0x7a, 0x40, 0xb6, 0x28, 0xdb, 0x85,
 | 
			
		||||
  0x3d, 0xf8, 0xd6, 0x06, 0x52, 0xc6, 0x80, 0x16, 0x7b, 0xf0, 0x81, 0x19, 0x73, 0x71, 0x99, 0x5e,
 | 
			
		||||
  0x6d, 0xd2, 0x2b, 0x16, 0xfb, 0x4d, 0x51, 0xfb, 0xea, 0xc6, 0x1d, 0xac, 0x71, 0x4a, 0x0b, 0xea,
 | 
			
		||||
  0x41, 0x18, 0xce, 0x14, 0x48, 0xd4, 0x68, 0x95, 0x3f, 0xe6, 0xa2, 0x50, 0x22, 0xe9, 0x3d, 0xb4,
 | 
			
		||||
  0xa5, 0xec, 0x89, 0xc6, 0x90, 0x67, 0x59, 0x87, 0xd4, 0x4f, 0x75, 0xda, 0xb8, 0x21, 0xfb, 0x05,
 | 
			
		||||
  0x7d, 0xe3, 0x9c, 0xdb, 0x21, 0x64, 0x73, 0x67, 0x99, 0x07, 0x03, 0x2a, 0x40, 0x90, 0x82, 0x78,
 | 
			
		||||
  0x4c, 0xc0, 0x15, 0xfc, 0x5d, 0x1b, 0x65, 0x77, 0xb2, 0x2a, 0x70, 0xe8, 0x44, 0x12, 0x7c, 0xf3,
 | 
			
		||||
  0x95, 0x87, 0x4f, 0xd2, 0xd0, 0x23, 0x18, 0x1d, 0x52, 0x74, 0x8f, 0xb4, 0x4f, 0x14, 0xdf, 0x53,
 | 
			
		||||
  0xa7, 0x61, 0xdf, 0xfd, 0x1c, 0x45, 0x2d, 0x5b, 0xae, 0x70, 0x15, 0x3e, 0x4f, 0xac, 0xe0, 0xfc,
 | 
			
		||||
  0xc0, 0x32, 0x55, 0xcd, 0x3d, 0x14, 0xd1, 0x08, 0x62, 0x91, 0x65, 0x76, 0x82, 0x14, 0x8d, 0x51,
 | 
			
		||||
  0x21, 0xb0, 0x9d, 0xe9, 0xe9, 0x5d, 0x3e, 0xc9, 0xe8, 0xe1, 0xf3, 0x84, 0x1e, 0xf4, 0x4b, 0x60,
 | 
			
		||||
  0xb2, 0x20, 0x17, 0xe5, 0xbe, 0xc1, 0xee, 0x95, 0x99, 0xf8, 0x66, 0x19, 0xd6, 0x2b, 0xb9, 0x80,
 | 
			
		||||
  0xea, 0x89, 0x88, 0xdf, 0xe3, 0x02, 0x5a, 0x36, 0xdf, 0x80, 0x12, 0x67, 0x1b, 0x83, 0xcd, 0xae,
 | 
			
		||||
  0x94, 0xd7, 0xf3, 0x0c, 0xae, 0xd9, 0x4f, 0x45, 0xb6, 0xc4, 0xb1, 0x2b, 0xe6, 0x61, 0x55, 0x85,
 | 
			
		||||
  0xc6, 0x7d, 0x9c, 0xe8, 0xfc, 0x08, 0x99, 0xb1, 0x8a, 0x19, 0xd0, 0x76, 0x69, 0x9a, 0x72, 0x6c,
 | 
			
		||||
  0xcc, 0x93, 0xdc, 0x45, 0x35, 0x84, 0x76, 0xc2, 0x3a, 0xe2, 0x04, 0x8e, 0x37, 0xce, 0x73, 0x07,
 | 
			
		||||
  0xad, 0x87, 0xd0, 0xc7, 0x81, 0x8d, 0xaa, 0x03, 0x91, 0x5f, 0x14, 0x19, 0xf3, 0x31, 0xf7, 0xe2,
 | 
			
		||||
  0xb5, 0x2c, 0xfe, 0xb7, 0xbe, 0x00, 0xc6, 0x3c, 0x8c, 0x02, 0xcd, 0x04, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/welcome.htm, do not edit!!
 | 
			
		||||
const char PAGE_welcome[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset="utf-8"><meta 
 | 
			
		||||
content="width=device-width" name="viewport"><meta name="theme-color" 
 | 
			
		||||
content="#222222"><title>Welcome!</title><style>
 | 
			
		||||
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background-color:#222;margin:0;color:#fff}button{outline:0;cursor:pointer;padding:8px;margin:10px;width:230px;text-transform:uppercase;font-family:helvetica;font-size:19px;background-color:#333;color:#fff;border:0 solid #fff;border-radius:25px}img{width:950px;max-width:82%;image-rendering:pixelated;image-rendering:crisp-edges;margin:4vh 0 0 0;animation:fi 1s}@keyframes fi{from{opacity:0}to{opacity:1}}.main{animation:fi 1.5s .7s both}
 | 
			
		||||
</style></head><body><img alt="" 
 | 
			
		||||
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAAfCAMAAADazLOuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABLUExURQAAAAB81gCU/zKq///mo7sWMN8bO+ZIYtZaAP9rAP+HMsCiG+TAIOnMS0KqNU7KPnLUZOrq6v///4CAgGhoaL+/v6CgoExMTAAAAAlm4O8AAAAZdFJOU////////////////////////////////wABNAq3AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACN0lEQVRIS73VjVLCMBAEYIr8CYKkrdj3f1J37zaXFCpTO+piaDgbPq9px9VQ0qyrvKj4q6m0Zr1h+M7xF1zRmnWzqV9/0d2jttGotO1uv9dUObwej5oqp7fzWVPl8n69aprzoOUUbbvdIbV3OLwitXc6vSG1d7m8I3feSEN0j2CeNbOY4MxigjOLCc4sZsTV2l1cCyy4wIILLLjAxtykltq2rbTU+qi01N5rXNO2leaFORoija2l5MM5a02ac9Ya16Sk5tgaPrUpjZub0BL6YqSxKwbH77XUUmSkJXSl8QtaMuyJhq5maL5nTKVpZC13VmtMpTFT2g4vJjTuGfMzzXftiUZnhdtgb1xofvypRon5TjNnxYN9zJo6K5ruSIzQtGuVZn0x91rKvdHBvm39E7SyZ4y06Gz8BDBFKzsXmhcwyfsGZ9VpbhoiCinaxPNmGWmWWrNU2jB0q6HvOhN1JUtCixQtp2g51ZVUXIPS2RMAD++T2nY/DrDjOMDO4wC7jmNYj3d73nrXug8Yt9uNB8xNU1cKNXWlUFNXCjV1pZhGTE83m2vWfYf/NGj4Bg1zu5JD3/MnH5ZWfLOksbmGWGjgXMN5/C2GXYGFFW9Nmtle6Xut0Gm+JsayCj8z0nhjGvYJzVf4aSzmNYsr+u7Q2JIdoX3YOQjOslmsW1jJ3120nE9gfo79hTaNdcsqVR610lvO47pllae9ReZ805zKo2a3iaY5c75pTmVCA6dJ5H7N0sr/asPwBehb7ifEhusRAAAAAElFTkSuQmCC">
 | 
			
		||||
<div class="main"><h1>Welcome to WLED!</h1><h3>
 | 
			
		||||
Thank you for installing my application!</h3><b>Next steps:</b><br><br>
 | 
			
		||||
Connect the module to your local WiFi here!<br><button 
 | 
			
		||||
onclick='window.location.href="/settings/wifi"'>WiFi settings</button><br><i>
 | 
			
		||||
Just trying this out in AP mode?</i><br><button 
 | 
			
		||||
onclick='window.location.href="/sliders"'>To the controls!</button><br></div>
 | 
			
		||||
</body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_welcome_length = 1528;
 | 
			
		||||
const uint8_t PAGE_welcome[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x56, 0x5b, 0x93, 0xaa, 0x3a,
 | 
			
		||||
  0x16, 0x7e, 0xef, 0x5f, 0xc1, 0x76, 0xea, 0xd4, 0x79, 0x70, 0x77, 0x73, 0x13, 0x51, 0xdb, 0xee,
 | 
			
		||||
  0x19, 0xc5, 0x4b, 0x7b, 0x03, 0x6f, 0x78, 0x7b, 0x0b, 0x10, 0x20, 0x08, 0x04, 0x93, 0x80, 0x97,
 | 
			
		||||
  0xae, 0xfe, 0xef, 0x13, 0x74, 0xf7, 0xd4, 0x3e, 0x75, 0x1e, 0xa6, 0x4e, 0x2c, 0x21, 0xf9, 0x92,
 | 
			
		||||
  0xb5, 0xd6, 0xb7, 0x92, 0xb8, 0x3e, 0xdb, 0x3f, 0x7a, 0x96, 0xb1, 0xde, 0xcf, 0xfb, 0x42, 0xc8,
 | 
			
		||||
  0x92, 0xf8, 0xbd, 0xfd, 0xeb, 0x09, 0x81, 0xf7, 0xde, 0x4e, 0x20, 0x03, 0x82, 0x1b, 0x02, 0x42,
 | 
			
		||||
  0x21, 0x7b, 0xab, 0xe4, 0xcc, 0x7f, 0x6e, 0x54, 0x7e, 0xa1, 0x4f, 0x2e, 0x4e, 0x19, 0x4c, 0x39,
 | 
			
		||||
  0x7c, 0x46, 0x1e, 0x0b, 0xdf, 0x3c, 0x58, 0x20, 0x17, 0x3e, 0xdf, 0x07, 0x15, 0x21, 0x05, 0x09,
 | 
			
		||||
  0x7c, 0xab, 0x14, 0x08, 0x9e, 0x33, 0x4c, 0xd8, 0xb7, 0xcd, 0x03, 0x65, 0x21, 0x4c, 0xe0, 0xb3,
 | 
			
		||||
  0x8b, 0x63, 0x4c, 0x2a, 0xbf, 0xb9, 0xf9, 0x97, 0x72, 0x6f, 0x7c, 0x2d, 0x43, 0x2c, 0x86, 0xef,
 | 
			
		||||
  0x5b, 0x18, 0xbb, 0x38, 0x81, 0x3f, 0xda, 0xe2, 0x63, 0xdc, 0xa6, 0xec, 0xca, 0x5f, 0x4f, 0x0e,
 | 
			
		||||
  0xf6, 0xae, 0x9f, 0x3e, 0xb7, 0x7a, 0xf6, 0x41, 0x82, 0xe2, 0x6b, 0x6b, 0x03, 0x89, 0x07, 0x52,
 | 
			
		||||
  0xf0, 0xf3, 0x03, 0xc6, 0x05, 0x64, 0xc8, 0x05, 0x3f, 0x29, 0x48, 0xe9, 0x33, 0x85, 0x04, 0xf9,
 | 
			
		||||
  0xaf, 0x0c, 0x5e, 0xd8, 0x33, 0x88, 0x51, 0x90, 0xb6, 0x5c, 0x1e, 0x06, 0x92, 0x57, 0x07, 0xb8,
 | 
			
		||||
  0xc7, 0x80, 0xe0, 0x3c, 0xf5, 0x1e, 0x1c, 0x5a, 0x65, 0xe0, 0xd7, 0x04, 0x90, 0x00, 0xa5, 0x2d,
 | 
			
		||||
  0xe9, 0xf5, 0x17, 0xe6, 0xfb, 0xfe, 0x97, 0x93, 0x33, 0x86, 0xd3, 0x4f, 0x9c, 0xb3, 0x18, 0xa5,
 | 
			
		||||
  0xb0, 0x9c, 0xcb, 0x09, 0xe5, 0x93, 0x19, 0x46, 0x77, 0x4f, 0x19, 0xf0, 0x3c, 0x94, 0x06, 0xad,
 | 
			
		||||
  0x46, 0x76, 0xf9, 0xb6, 0x97, 0x25, 0xde, 0xbf, 0xef, 0x41, 0x4b, 0x51, 0xcb, 0xfe, 0x3d, 0x3e,
 | 
			
		||||
  0x23, 0x9c, 0x90, 0x8f, 0x49, 0xd2, 0xca, 0xb3, 0x0c, 0x12, 0x17, 0x50, 0xf8, 0xfa, 0x7b, 0x06,
 | 
			
		||||
  0xe1, 0x37, 0xf3, 0x07, 0x4a, 0xd1, 0x0d, 0xb6, 0xe4, 0x26, 0xb7, 0xfe, 0x3b, 0x57, 0x55, 0x55,
 | 
			
		||||
  0x7f, 0xa3, 0xf8, 0xea, 0x60, 0xe2, 0x41, 0xd2, 0x92, 0x04, 0x8a, 0x63, 0xe4, 0x09, 0xbf, 0x61,
 | 
			
		||||
  0xcf, 0x04, 0x78, 0x28, 0xa7, 0x2d, 0x45, 0xcb, 0x2e, 0x5f, 0x28, 0x09, 0x3e, 0x1f, 0xac, 0x9a,
 | 
			
		||||
  0x9a, 0x74, 0x67, 0x7b, 0x79, 0x9c, 0x54, 0xab, 0xa1, 0xfc, 0xf1, 0x8a, 0x12, 0x10, 0xc0, 0x67,
 | 
			
		||||
  0x02, 0x53, 0x6e, 0x56, 0xe6, 0x93, 0xa1, 0x0b, 0x8c, 0x01, 0x83, 0xde, 0xdf, 0x66, 0x5c, 0x82,
 | 
			
		||||
  0x68, 0xf6, 0x0c, 0xbd, 0x00, 0xd2, 0xef, 0x8c, 0x6b, 0x45, 0x28, 0x48, 0xe5, 0xe7, 0x15, 0xa4,
 | 
			
		||||
  0x7c, 0x39, 0x43, 0x38, 0x6d, 0xf9, 0x48, 0x90, 0xe9, 0xd7, 0x7f, 0x8e, 0xf0, 0xea, 0x13, 0x7e,
 | 
			
		||||
  0xe4, 0x54, 0xf0, 0xd1, 0xa7, 0x4f, 0x70, 0xf2, 0x89, 0x33, 0xe0, 0x22, 0x76, 0x6d, 0x49, 0x5f,
 | 
			
		||||
  0x0c, 0xff, 0x6f, 0x20, 0x7f, 0x7d, 0xbd, 0x24, 0x00, 0xa5, 0x9f, 0x7f, 0x75, 0xf0, 0xa2, 0x51,
 | 
			
		||||
  0xe1, 0x45, 0xa7, 0x82, 0x83, 0x59, 0xf8, 0xf5, 0xd4, 0x16, 0x1f, 0xc7, 0xdf, 0x16, 0x1f, 0x37,
 | 
			
		||||
  0xb3, 0xbc, 0x05, 0xef, 0x6d, 0x9e, 0x97, 0x00, 0x62, 0x7e, 0x79, 0xf8, 0x45, 0xa2, 0xc4, 0x7d,
 | 
			
		||||
  0xab, 0x78, 0x80, 0x81, 0xd6, 0x9d, 0xb5, 0x98, 0xa5, 0x01, 0xdf, 0x3f, 0x0a, 0xeb, 0xb5, 0x9f,
 | 
			
		||||
  0x68, 0xd3, 0xb5, 0x96, 0x67, 0x69, 0x32, 0x0c, 0x70, 0x87, 0x37, 0x73, 0x65, 0x87, 0x7d, 0x3b,
 | 
			
		||||
  0xe0, 0xbd, 0xa1, 0x54, 0x8e, 0x7d, 0xa3, 0x33, 0xe3, 0xaf, 0x1e, 0xb8, 0x4d, 0xad, 0xbc, 0x04,
 | 
			
		||||
  0x3a, 0x3b, 0x73, 0xb5, 0x94, 0x46, 0x1d, 0x42, 0x6b, 0x6e, 0x7d, 0x51, 0x02, 0xcb, 0x74, 0x61,
 | 
			
		||||
  0xcb, 0xdd, 0x4e, 0xc7, 0xb8, 0x44, 0xe7, 0xa2, 0xb1, 0x5f, 0xd8, 0x1c, 0xeb, 0x4e, 0xed, 0xfe,
 | 
			
		||||
  0xc5, 0x5e, 0xde, 0xe7, 0xbb, 0x0d, 0x39, 0x30, 0x6c, 0xf1, 0x36, 0x39, 0x89, 0xa2, 0x98, 0x60,
 | 
			
		||||
  0x9d, 0x6e, 0x67, 0x66, 0xc3, 0xb1, 0xaa, 0x87, 0xd1, 0x9e, 0x1d, 0x40, 0x67, 0xde, 0x24, 0x9d,
 | 
			
		||||
  0x79, 0xf5, 0x63, 0x46, 0x0d, 0x34, 0xac, 0xae, 0x3b, 0x23, 0x2b, 0x9d, 0xad, 0xa4, 0xc9, 0xc9,
 | 
			
		||||
  0xb4, 0xf5, 0xc9, 0x3c, 0x9d, 0xda, 0x07, 0x8b, 0x9c, 0xea, 0x05, 0xb7, 0xac, 0x19, 0x9d, 0x60,
 | 
			
		||||
  0x18, 0x62, 0x30, 0xad, 0x8a, 0x45, 0xdd, 0x08, 0x70, 0xff, 0x32, 0x5b, 0xdf, 0x09, 0xc5, 0x49,
 | 
			
		||||
  0xcd, 0x6a, 0x94, 0x9d, 0x83, 0x37, 0x18, 0x5b, 0xb6, 0xf8, 0x7f, 0xda, 0xb9, 0xd3, 0x35, 0x3b,
 | 
			
		||||
  0x27, 0xb5, 0x34, 0x30, 0x76, 0xdd, 0xd1, 0x76, 0x57, 0xe6, 0xa7, 0xf7, 0xf8, 0xc3, 0x3a, 0x9f,
 | 
			
		||||
  0x3f, 0x3e, 0x9c, 0x7a, 0x78, 0x2c, 0xa7, 0x4c, 0x29, 0xee, 0x2f, 0x36, 0xcb, 0xd1, 0x4a, 0x57,
 | 
			
		||||
  0x37, 0xd1, 0x66, 0x6a, 0xcc, 0xba, 0x9d, 0xfe, 0x7e, 0x44, 0x1a, 0xc6, 0x7e, 0x72, 0x24, 0x5e,
 | 
			
		||||
  0xa4, 0xfa, 0xf2, 0x58, 0xd5, 0x6f, 0x60, 0x37, 0x30, 0xb2, 0xb5, 0x55, 0xcd, 0x10, 0xe8, 0x05,
 | 
			
		||||
  0xce, 0xfc, 0xc4, 0x2f, 0x66, 0x73, 0xb3, 0x90, 0x4e, 0x57, 0x52, 0x4c, 0xa2, 0xda, 0xa9, 0x9e,
 | 
			
		||||
  0x48, 0x07, 0x22, 0x87, 0xd5, 0x99, 0x7e, 0x19, 0xc8, 0xb7, 0x65, 0x92, 0x6e, 0x6f, 0xa7, 0x4d,
 | 
			
		||||
  0x53, 0x94, 0x3c, 0x25, 0x62, 0x6c, 0x88, 0x99, 0x25, 0xe7, 0x45, 0xd3, 0xb3, 0x2d, 0xe7, 0x0c,
 | 
			
		||||
  0x23, 0x0d, 0x9f, 0x32, 0xdd, 0xbf, 0x6d, 0x37, 0xf3, 0xb8, 0x91, 0xd6, 0x9b, 0x20, 0x23, 0x37,
 | 
			
		||||
  0x6c, 0xd9, 0xb6, 0xe3, 0x14, 0xde, 0xc8, 0xd9, 0xa8, 0xd6, 0xf4, 0x8c, 0xd8, 0xce, 0xad, 0x17,
 | 
			
		||||
  0xab, 0xa1, 0xec, 0xe9, 0x49, 0x63, 0xa4, 0xfa, 0x70, 0xd5, 0x37, 0xa5, 0x48, 0x31, 0xa0, 0xe9,
 | 
			
		||||
  0x58, 0xfb, 0xda, 0xec, 0x82, 0x82, 0xc8, 0x9a, 0x1a, 0x6e, 0x8d, 0x1e, 0xe8, 0x7a, 0xa3, 0xc4,
 | 
			
		||||
  0xb2, 0x6b, 0x5c, 0xaf, 0xb5, 0xf3, 0x68, 0x34, 0x9d, 0x4e, 0xa3, 0xce, 0x85, 0x5d, 0x8f, 0x31,
 | 
			
		||||
  0x3b, 0x29, 0xc4, 0x59, 0xdb, 0xd5, 0x13, 0x92, 0x64, 0x53, 0x23, 0x3b, 0xd3, 0x52, 0x62, 0x08,
 | 
			
		||||
  0x06, 0xd6, 0x12, 0xa3, 0x08, 0x28, 0xb1, 0x36, 0x9b, 0x69, 0x40, 0x52, 0x80, 0xdb, 0xdc, 0x03,
 | 
			
		||||
  0xb9, 0xbe, 0x3a, 0x6a, 0x2c, 0x00, 0x73, 0x62, 0x67, 0xd1, 0x21, 0x77, 0xa4, 0xee, 0xb4, 0xbe,
 | 
			
		||||
  0x3f, 0xad, 0x2e, 0x93, 0xb3, 0xf3, 0xa1, 0xeb, 0x3b, 0xdb, 0x4e, 0x56, 0xc7, 0xf1, 0x6e, 0x15,
 | 
			
		||||
  0x37, 0x16, 0x0c, 0xcc, 0xf2, 0xeb, 0x38, 0x3c, 0x69, 0x09, 0x98, 0x6a, 0xe9, 0x7a, 0xb2, 0xc9,
 | 
			
		||||
  0x0e, 0x86, 0xac, 0x6e, 0x12, 0x36, 0xcb, 0xd6, 0x83, 0xb5, 0x12, 0xd4, 0x8a, 0x71, 0xb4, 0xce,
 | 
			
		||||
  0x87, 0xfe, 0xec, 0x76, 0xdb, 0xf9, 0x0c, 0xd9, 0x87, 0x34, 0xf4, 0x58, 0xe0, 0xc8, 0x17, 0xec,
 | 
			
		||||
  0x17, 0xd7, 0x6c, 0x89, 0x53, 0x6d, 0x1d, 0x99, 0xe9, 0x65, 0x6f, 0x36, 0x6f, 0x63, 0x5c, 0x9f,
 | 
			
		||||
  0x68, 0x24, 0x5f, 0x8d, 0x6e, 0x0b, 0x36, 0xcc, 0x37, 0x87, 0x54, 0xba, 0x34, 0x65, 0x32, 0x29,
 | 
			
		||||
  0xbc, 0x8f, 0x6e, 0x91, 0xa8, 0xcd, 0xbe, 0xbe, 0xba, 0x1e, 0x6a, 0x57, 0xa9, 0x3e, 0xbc, 0x35,
 | 
			
		||||
  0xba, 0xbd, 0xee, 0x60, 0x72, 0xa3, 0xbb, 0x24, 0x74, 0xcf, 0x57, 0x9f, 0x0e, 0x0f, 0xcd, 0x4d,
 | 
			
		||||
  0xe6, 0x84, 0x18, 0x19, 0x28, 0x05, 0x97, 0xb9, 0x99, 0x0c, 0xb7, 0xc9, 0x76, 0x4b, 0x4c, 0x5b,
 | 
			
		||||
  0x89, 0xba, 0xd2, 0xa9, 0xfe, 0x51, 0x58, 0xa1, 0x29, 0x8f, 0x6d, 0x66, 0xa0, 0xcb, 0x82, 0x65,
 | 
			
		||||
  0x4a, 0xa0, 0xc9, 0x87, 0x8d, 0xbd, 0x1b, 0xcd, 0x57, 0xca, 0x72, 0xd6, 0xe9, 0x55, 0xab, 0x6b,
 | 
			
		||||
  0x25, 0xdd, 0x8b, 0x3d, 0xd2, 0x8b, 0xac, 0x59, 0xcf, 0xaa, 0x9d, 0x0d, 0x3d, 0x4a, 0xcc, 0x7d,
 | 
			
		||||
  0xa4, 0x7a, 0xba, 0x9a, 0x92, 0x5d, 0x1e, 0x34, 0xf6, 0xac, 0x99, 0x9b, 0xdd, 0xc6, 0xc5, 0xb4,
 | 
			
		||||
  0x65, 0x77, 0x62, 0xee, 0xb6, 0xb1, 0x3d, 0x30, 0x77, 0x46, 0xb4, 0x91, 0xb3, 0x43, 0x38, 0x5c,
 | 
			
		||||
  0xf7, 0x1b, 0x6a, 0xa2, 0x14, 0x5b, 0x7f, 0xef, 0x8b, 0xe6, 0x30, 0xaa, 0x75, 0x03, 0xf9, 0x96,
 | 
			
		||||
  0x6b, 0xe3, 0x9e, 0x2a, 0xce, 0xd2, 0x0f, 0xed, 0xb0, 0xf5, 0xa7, 0xd6, 0x91, 0x3a, 0x9c, 0xd2,
 | 
			
		||||
  0x30, 0x0a, 0x76, 0x33, 0x53, 0x13, 0x0d, 0x65, 0xb8, 0xdb, 0x0f, 0x07, 0x83, 0x6d, 0xd3, 0x4c,
 | 
			
		||||
  0x78, 0xfd, 0xae, 0xef, 0x72, 0x26, 0x0d, 0x93, 0xea, 0x98, 0x82, 0xab, 0x11, 0x35, 0x6e, 0x52,
 | 
			
		||||
  0x1a, 0x46, 0xc3, 0x62, 0x3f, 0xbe, 0x6d, 0xfc, 0x1a, 0x58, 0xdd, 0x38, 0x13, 0x4a, 0xaa, 0xb9,
 | 
			
		||||
  0xbe, 0x50, 0xc6, 0x23, 0x0f, 0xef, 0xd4, 0xbd, 0xb5, 0x88, 0x2c, 0x1a, 0x27, 0x74, 0x2b, 0x47,
 | 
			
		||||
  0x63, 0x55, 0x56, 0xa4, 0xb4, 0xdf, 0x0c, 0x7c, 0xac, 0x37, 0xc3, 0x35, 0x30, 0x3d, 0x97, 0x9e,
 | 
			
		||||
  0x36, 0xcb, 0xba, 0x2c, 0xc5, 0x85, 0x55, 0xd3, 0xb3, 0x38, 0x06, 0xb0, 0xb9, 0x84, 0x87, 0x86,
 | 
			
		||||
  0xa4, 0xdd, 0x26, 0x58, 0x01, 0x2a, 0x02, 0x7b, 0xcd, 0xd5, 0xb5, 0x6c, 0x9d, 0x6c, 0x8c, 0x4e,
 | 
			
		||||
  0xdd, 0x1b, 0x6b, 0x1f, 0xba, 0x29, 0x51, 0x22, 0x02, 0x3a, 0x3f, 0x77, 0x61, 0xe8, 0xe8, 0xc8,
 | 
			
		||||
  0xef, 0x87, 0x39, 0x5d, 0xde, 0x7f, 0x5a, 0xfd, 0x78, 0xb0, 0x3e, 0xae, 0xf2, 0x45, 0x62, 0x18,
 | 
			
		||||
  0x95, 0xf7, 0xa7, 0xb6, 0x87, 0x0a, 0xc1, 0x8d, 0x01, 0xa5, 0x6f, 0x95, 0xb2, 0x28, 0x71, 0x39,
 | 
			
		||||
  0x0a, 0xe5, 0x6f, 0x2d, 0x12, 0x18, 0x16, 0xb6, 0xd3, 0x7e, 0x8f, 0x6b, 0x12, 0x07, 0xdb, 0xa1,
 | 
			
		||||
  0xfa, 0xfe, 0xb4, 0x0e, 0x41, 0x7a, 0x14, 0xae, 0x38, 0x17, 0x78, 0x7d, 0x17, 0x50, 0x4a, 0x19,
 | 
			
		||||
  0x88, 0xb9, 0x5a, 0x04, 0x42, 0x72, 0x15, 0x40, 0x96, 0xc5, 0xbc, 0xa8, 0x97, 0x15, 0xad, 0xb4,
 | 
			
		||||
  0x50, 0x79, 0xd5, 0x7a, 0x37, 0xb9, 0x1e, 0x08, 0x94, 0xc1, 0x8c, 0xb6, 0xda, 0xa2, 0xc3, 0x11,
 | 
			
		||||
  0x72, 0xff, 0x3e, 0x19, 0x38, 0x4d, 0xa1, 0xcb, 0x04, 0x2e, 0x8e, 0x42, 0x82, 0xbd, 0x3c, 0xbe,
 | 
			
		||||
  0x07, 0xe3, 0x7e, 0x89, 0x10, 0x63, 0x17, 0xc4, 0xc2, 0x16, 0x0d, 0x90, 0x10, 0x42, 0xc2, 0x05,
 | 
			
		||||
  0xf1, 0x6e, 0x73, 0xd7, 0x26, 0xe1, 0x09, 0xa7, 0x2e, 0x8f, 0x71, 0x7c, 0xfb, 0xf3, 0x8c, 0x52,
 | 
			
		||||
  0x0f, 0x9f, 0x5f, 0xca, 0xc5, 0x65, 0xc0, 0x97, 0x90, 0x40, 0xff, 0xad, 0x22, 0x72, 0xe1, 0x66,
 | 
			
		||||
  0x9c, 0x0e, 0x15, 0xcf, 0xc8, 0x47, 0x95, 0x3f, 0xdf, 0xef, 0x6e, 0xbe, 0x41, 0xce, 0xe0, 0xee,
 | 
			
		||||
  0xe6, 0x41, 0x03, 0xbd, 0x3f, 0x8d, 0x73, 0xca, 0x29, 0x90, 0x6b, 0x99, 0x00, 0x0b, 0x11, 0x15,
 | 
			
		||||
  0xb8, 0xf6, 0xf1, 0xa4, 0x84, 0xce, 0xbc, 0x24, 0x05, 0xff, 0xdd, 0x16, 0xd1, 0xfb, 0x3f, 0x0b,
 | 
			
		||||
  0xcf, 0x55, 0x09, 0x12, 0xca, 0x03, 0xaf, 0xf1, 0x3d, 0xb7, 0x52, 0xee, 0x09, 0x8e, 0xe9, 0x8f,
 | 
			
		||||
  0xbf, 0xc6, 0x16, 0xf9, 0xb6, 0xf3, 0xcd, 0x17, 0x1f, 0x65, 0x5d, 0xbc, 0xff, 0x07, 0xf9, 0x2f,
 | 
			
		||||
  0xec, 0xfa, 0x82, 0xd2, 0x99, 0x08, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/liveview.htm, do not edit!!
 | 
			
		||||
const char PAGE_liveview[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" 
 | 
			
		||||
content="width=device-width,initial-scale=1,minimum-scale=1"><meta 
 | 
			
		||||
charset="utf-8"><meta name="theme-color" content="#222222"><title>
 | 
			
		||||
WLED Live Preview</title><style>
 | 
			
		||||
body{margin:0}#canv{background:#000;filter:brightness(175%);width:100%;height:100%;position:absolute}
 | 
			
		||||
</style></head><body><div id="canv"><script>
 | 
			
		||||
update();var tmout=null;function update(){if(document.hidden)return clearTimeout(tmout),void(tmout=setTimeout(update,250));fetch("/json/live").then(t=>(t.ok||(clearTimeout(tmout),tmout=setTimeout(update,2500)),t.json())).then(t=>{var e="linear-gradient(90deg,",u=t.leds.length;for(i=0;i<u;i++){var o=t.leds[i];o.length>6&&(o=o.substring(2)),e+="#"+o,i<u-1&&(e+=",")}e+=")",document.getElementById("canv").style.background=e,clearTimeout(tmout),tmout=setTimeout(update,40)}).catch((function(t){clearTimeout(tmout),tmout=setTimeout(update,2500)}))}
 | 
			
		||||
</script></body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_liveview_length = 547;
 | 
			
		||||
const uint8_t PAGE_liveview[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x95, 0x53, 0x4d, 0x6f, 0xdb, 0x30,
 | 
			
		||||
  0x0c, 0xbd, 0xe7, 0x57, 0x78, 0x2a, 0x5a, 0x48, 0x88, 0x63, 0x3b, 0xc5, 0xba, 0x8f, 0xf8, 0xe3,
 | 
			
		||||
  0xb0, 0xb5, 0x87, 0x02, 0x05, 0xd6, 0x43, 0x81, 0x61, 0x18, 0x76, 0x50, 0x24, 0xc6, 0xd6, 0x2a,
 | 
			
		||||
  0x4b, 0x81, 0x4c, 0xb9, 0x08, 0xd2, 0xfc, 0xf7, 0xc9, 0x76, 0xd2, 0x62, 0xc0, 0x30, 0xa0, 0x3e,
 | 
			
		||||
  0xc8, 0x94, 0xf8, 0xf4, 0x48, 0x3e, 0x52, 0xc5, 0xbb, 0xeb, 0x6f, 0x5f, 0x1f, 0x7e, 0xdc, 0xdf,
 | 
			
		||||
  0x44, 0x0d, 0xb6, 0xba, 0x2a, 0x8e, 0x2b, 0x70, 0x59, 0x15, 0x2d, 0x20, 0x8f, 0x0c, 0x6f, 0xa1,
 | 
			
		||||
  0x24, 0xbd, 0x82, 0xa7, 0xad, 0x75, 0x48, 0xa2, 0x99, 0xb0, 0x06, 0xc1, 0x60, 0x49, 0x9e, 0x94,
 | 
			
		||||
  0xc4, 0xa6, 0x94, 0xd0, 0x2b, 0x01, 0x8b, 0x71, 0x13, 0x2b, 0xa3, 0x50, 0x71, 0xbd, 0xe8, 0x04,
 | 
			
		||||
  0xd7, 0x50, 0x2e, 0xe3, 0x36, 0x1c, 0xb4, 0xbe, 0x3d, 0xed, 0xc9, 0x91, 0x73, 0x26, 0x1a, 0xee,
 | 
			
		||||
  0x3a, 0x08, 0x1c, 0x1e, 0x37, 0x8b, 0x4f, 0xe4, 0xaf, 0x50, 0xd8, 0x40, 0x0b, 0x0b, 0x61, 0xb5,
 | 
			
		||||
  0x75, 0x24, 0x7a, 0x09, 0x76, 0x76, 0x39, 0x7e, 0x01, 0x8a, 0x0a, 0x35, 0x54, 0xb3, 0xef, 0x77,
 | 
			
		||||
  0x37, 0xd7, 0xd1, 0x9d, 0xea, 0x21, 0xba, 0x77, 0x30, 0xa4, 0x57, 0xa4, 0x93, 0xa7, 0xe8, 0x70,
 | 
			
		||||
  0x37, 0x00, 0xd6, 0x56, 0xee, 0xf6, 0x2d, 0x77, 0xb5, 0x32, 0xab, 0xec, 0x70, 0x26, 0xb8, 0xe9,
 | 
			
		||||
  0xf7, 0x6b, 0x2e, 0x1e, 0x6b, 0x67, 0xbd, 0x91, 0xab, 0xb3, 0x2c, 0xcb, 0xf2, 0x8d, 0xd2, 0x08,
 | 
			
		||||
  0x6e, 0xb5, 0x76, 0xaa, 0x6e, 0xd0, 0x40, 0xd7, 0xd1, 0xe5, 0xc7, 0xab, 0x73, 0x96, 0x8f, 0xd5,
 | 
			
		||||
  0xac, 0x96, 0x59, 0x76, 0x9e, 0x37, 0x30, 0xf8, 0x26, 0x7b, 0x6b, 0xbb, 0x50, 0x9f, 0x35, 0x2b,
 | 
			
		||||
  0xbe, 0xee, 0xac, 0xf6, 0x08, 0x87, 0x59, 0x91, 0x4e, 0xe1, 0x8a, 0x74, 0xd2, 0x6c, 0x88, 0x5a,
 | 
			
		||||
  0x15, 0x52, 0xf5, 0x91, 0x92, 0x25, 0x19, 0x82, 0x86, 0x94, 0x3b, 0xe1, 0xd4, 0x16, 0xab, 0x99,
 | 
			
		||||
  0xdf, 0x4a, 0x8e, 0x40, 0x59, 0xde, 0x73, 0x17, 0x61, 0x6b, 0x3d, 0x96, 0xc6, 0x6b, 0x9d, 0x6f,
 | 
			
		||||
  0xbc, 0x11, 0x03, 0x6f, 0x74, 0x02, 0xec, 0xd5, 0x86, 0x4a, 0x2b, 0x7c, 0x1b, 0x6a, 0x4f, 0x1a,
 | 
			
		||||
  0x25, 0x25, 0x18, 0xe6, 0x00, 0xbd, 0x33, 0x91, 0xd0, 0xc0, 0xdd, 0x83, 0x6a, 0x21, 0xdc, 0xa6,
 | 
			
		||||
  0x23, 0x07, 0x8b, 0x7b, 0xab, 0xe4, 0x64, 0x97, 0x41, 0xd5, 0x93, 0x73, 0x22, 0x8b, 0x2f, 0xaf,
 | 
			
		||||
  0x32, 0xc6, 0xf2, 0x0d, 0xa0, 0x68, 0x28, 0x49, 0x7f, 0x77, 0xd6, 0xa4, 0x3a, 0xc8, 0x46, 0x58,
 | 
			
		||||
  0x12, 0x94, 0x36, 0x14, 0xcb, 0x8a, 0x62, 0x62, 0x1f, 0x9f, 0x9f, 0xe9, 0xbf, 0xa8, 0xff, 0xc3,
 | 
			
		||||
  0x1a, 0x68, 0x63, 0x4c, 0x06, 0x42, 0xca, 0xd8, 0x2b, 0xdb, 0x7e, 0x28, 0x2e, 0xf4, 0x51, 0x2b,
 | 
			
		||||
  0x13, 0xe8, 0x16, 0xb5, 0xe3, 0x52, 0x85, 0x32, 0xe8, 0xe7, 0x4c, 0x42, 0x1d, 0x93, 0xd8, 0x97,
 | 
			
		||||
  0x98, 0x68, 0x90, 0x5d, 0x58, 0x4c, 0x8d, 0x4d, 0xbe, 0xb1, 0x8e, 0xaa, 0x32, 0xcb, 0x55, 0xe1,
 | 
			
		||||
  0x73, 0x35, 0x9f, 0xb3, 0xf1, 0xbe, 0x3d, 0x82, 0x7e, 0xaa, 0x5f, 0xb9, 0x3d, 0x22, 0xab, 0x0f,
 | 
			
		||||
  0x17, 0x17, 0xd4, 0x96, 0x36, 0xe9, 0xfc, 0xba, 0x43, 0xa7, 0x4c, 0x4d, 0x2f, 0x43, 0x0a, 0x30,
 | 
			
		||||
  0x0f, 0xd3, 0x41, 0xe6, 0x36, 0x0e, 0x04, 0x8b, 0x65, 0x80, 0x0c, 0x07, 0x31, 0x61, 0x87, 0xe1,
 | 
			
		||||
  0xcf, 0x48, 0xfc, 0xa2, 0x63, 0x0d, 0x78, 0xa3, 0x61, 0x30, 0xbf, 0xec, 0x6e, 0x25, 0x9d, 0x9a,
 | 
			
		||||
  0xc3, 0x92, 0xb1, 0x7f, 0xc9, 0xeb, 0x64, 0x94, 0x10, 0xbf, 0x45, 0x88, 0xf7, 0x19, 0x3b, 0xb0,
 | 
			
		||||
  0x44, 0xf0, 0x41, 0x5e, 0x7a, 0x6a, 0x24, 0x45, 0xb6, 0x7f, 0xb3, 0x9a, 0x07, 0xc6, 0xc6, 0x79,
 | 
			
		||||
  0x9a, 0x86, 0xa5, 0x48, 0xa7, 0x51, 0x4a, 0xc7, 0x17, 0xf9, 0x07, 0xe3, 0xed, 0x60, 0x85, 0xa7,
 | 
			
		||||
  0x03, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/liveviewws.htm, do not edit!!
 | 
			
		||||
const char PAGE_liveviewws[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" 
 | 
			
		||||
content="width=device-width,initial-scale=1,minimum-scale=1"><meta 
 | 
			
		||||
charset="utf-8"><meta name="theme-color" content="#222222"><title>
 | 
			
		||||
WLED Live Preview</title><style>
 | 
			
		||||
body{margin:0}#canv{background:#000;filter:brightness(175%);width:100%;height:100%;position:absolute}
 | 
			
		||||
</style></head><body><div id="canv"><script>
 | 
			
		||||
function updatePreview(e){var n="linear-gradient(90deg,",o=e.length;for(i=0;i<o;i++){var t=e[i];t.length>6&&(t=t.substring(2)),n+="#"+t,i<o-1&&(n+=",")}n+=")",document.getElementById("canv").style.background=n}function getLiveJson(e){try{var n=JSON.parse(e.data);n&&n.leds&&requestAnimationFrame((function(){updatePreview(n.leds)}))}catch(e){console.error("Live-Preview ws error:",e)}}var ws=top.window.ws;ws&&ws.readyState===WebSocket.OPEN?(console.info("Use top WS for peek"),ws.send("{'lv':true}")):(console.info("Peek ws opening"),(ws=new WebSocket("ws://"+document.location.host+"/ws")).onopen=function(){console.info("Peek WS opened"),ws.send("{'lv':true}")}),ws.addEventListener("message",getLiveJson)
 | 
			
		||||
</script></body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_liveviewws_length = 683;
 | 
			
		||||
const uint8_t PAGE_liveviewws[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x54, 0xeb, 0x6f, 0xd3, 0x30,
 | 
			
		||||
  0x10, 0xff, 0xde, 0xbf, 0x22, 0x78, 0xa2, 0x8b, 0xd5, 0x34, 0x6d, 0x91, 0x78, 0xe5, 0x51, 0x04,
 | 
			
		||||
  0xac, 0x48, 0x4c, 0x13, 0x9b, 0x34, 0xd0, 0x84, 0x10, 0x1f, 0xdc, 0xf8, 0x9a, 0x58, 0x4b, 0xec,
 | 
			
		||||
  0x62, 0x5f, 0x1a, 0x55, 0x55, 0xfe, 0x77, 0xce, 0x4d, 0x37, 0x1e, 0x82, 0x7c, 0xc8, 0xc3, 0xbe,
 | 
			
		||||
  0xbb, 0xdf, 0xe3, 0xce, 0xc9, 0x9e, 0x5c, 0x5c, 0xbf, 0xff, 0xfc, 0xf5, 0x66, 0x15, 0x54, 0xd8,
 | 
			
		||||
  0xd4, 0xcb, 0xec, 0x74, 0x07, 0x21, 0x97, 0x59, 0x03, 0x28, 0x02, 0x2d, 0x1a, 0xc8, 0xd9, 0x4e,
 | 
			
		||||
  0x41, 0xb7, 0x35, 0x16, 0x59, 0x30, 0x2a, 0x8c, 0x46, 0xd0, 0x98, 0xb3, 0x4e, 0x49, 0xac, 0x72,
 | 
			
		||||
  0x09, 0x3b, 0x55, 0xc0, 0xf4, 0xf8, 0x11, 0x29, 0xad, 0x50, 0x89, 0x7a, 0xea, 0x0a, 0x51, 0x43,
 | 
			
		||||
  0xbe, 0x88, 0x1a, 0x5a, 0x68, 0xda, 0xe6, 0xe1, 0x9b, 0x9d, 0x6a, 0x8e, 0x8a, 0x4a, 0x58, 0x07,
 | 
			
		||||
  0x54, 0xa3, 0xc5, 0xcd, 0xf4, 0x15, 0xfb, 0x03, 0x0a, 0x2b, 0x68, 0x60, 0x5a, 0x98, 0xda, 0x58,
 | 
			
		||||
  0x16, 0x3c, 0x82, 0x9d, 0x3d, 0x3b, 0x5e, 0x14, 0x8a, 0x0a, 0x6b, 0x58, 0x8e, 0xee, 0xae, 0x56,
 | 
			
		||||
  0x17, 0xc1, 0x95, 0xda, 0x41, 0x70, 0x63, 0xc1, 0xd3, 0xcb, 0x66, 0xc3, 0x4e, 0xe6, 0x70, 0xef,
 | 
			
		||||
  0x03, 0xd6, 0x46, 0xee, 0x0f, 0x8d, 0xb0, 0xa5, 0xd2, 0xc9, 0xbc, 0x3f, 0x2b, 0x84, 0xde, 0x1d,
 | 
			
		||||
  0xd6, 0xa2, 0xb8, 0x2f, 0xad, 0x69, 0xb5, 0x4c, 0xce, 0xe6, 0xf3, 0x79, 0xba, 0x51, 0x35, 0x82,
 | 
			
		||||
  0x4d, 0xd6, 0x56, 0x95, 0x15, 0x6a, 0x70, 0x2e, 0x5c, 0xbc, 0x7c, 0xfe, 0x94, 0xa7, 0x47, 0x35,
 | 
			
		||||
  0xc9, 0x62, 0x3e, 0x7f, 0x9a, 0x56, 0xe0, 0xf7, 0x86, 0xf7, 0xad, 0x71, 0xa4, 0xcf, 0xe8, 0x44,
 | 
			
		||||
  0xac, 0x9d, 0xa9, 0x5b, 0x84, 0x7e, 0x94, 0xcd, 0x06, 0xb8, 0x6c, 0x36, 0x78, 0xe6, 0x51, 0x97,
 | 
			
		||||
  0x99, 0x54, 0xbb, 0x40, 0xc9, 0x9c, 0x79, 0x50, 0xa2, 0xec, 0x0a, 0xab, 0xb6, 0xb8, 0x1c, 0x6d,
 | 
			
		||||
  0x5a, 0x5d, 0xf8, 0xfc, 0xa0, 0xdd, 0x4a, 0x81, 0x70, 0x22, 0x1e, 0x02, 0x3f, 0xec, 0x84, 0x0d,
 | 
			
		||||
  0x74, 0xce, 0x6a, 0xa5, 0x41, 0xd8, 0x69, 0x69, 0x85, 0x54, 0x24, 0x3b, 0x7c, 0x3d, 0x97, 0x50,
 | 
			
		||||
  0x46, 0x2c, 0x32, 0x39, 0xc4, 0x35, 0xe8, 0x12, 0xab, 0x74, 0x63, 0x6c, 0xa8, 0xf2, 0x79, 0xaa,
 | 
			
		||||
  0x32, 0x93, 0xaa, 0xc9, 0x64, 0x48, 0xc5, 0x1c, 0xbe, 0xa9, 0xef, 0x29, 0x9e, 0x82, 0x96, 0x2f,
 | 
			
		||||
  0xc6, 0xe3, 0x10, 0x73, 0x8c, 0x5d, 0xbb, 0x76, 0x68, 0x95, 0x2e, 0xc3, 0x67, 0x9c, 0x47, 0x7a,
 | 
			
		||||
  0x42, 0x3e, 0xb2, 0x09, 0x46, 0x94, 0x3b, 0x5d, 0x50, 0x88, 0x5f, 0x88, 0x18, 0xef, 0xfd, 0x93,
 | 
			
		||||
  0xb3, 0x48, 0x9a, 0xa2, 0x6d, 0x08, 0x36, 0x2e, 0x01, 0x57, 0x35, 0xf8, 0xd7, 0x77, 0xfb, 0x8f,
 | 
			
		||||
  0x32, 0x1c, 0x64, 0xf0, 0xf8, 0xa8, 0x34, 0xfe, 0xe5, 0x61, 0xae, 0xfb, 0x47, 0x45, 0x94, 0xe2,
 | 
			
		||||
  0x9b, 0x71, 0xe9, 0x8c, 0xf6, 0x7a, 0xd0, 0xee, 0x4f, 0x9a, 0x2e, 0x6f, 0xaf, 0x3f, 0xc5, 0x5b,
 | 
			
		||||
  0xdf, 0xee, 0x10, 0x62, 0x52, 0x2d, 0x78, 0xaa, 0xc7, 0x63, 0x4d, 0x4c, 0xa5, 0x1b, 0x8f, 0x2d,
 | 
			
		||||
  0xfc, 0x68, 0xc1, 0xe1, 0x5b, 0x1a, 0x13, 0xe1, 0xeb, 0x7c, 0xb0, 0x34, 0x03, 0x61, 0xf8, 0x50,
 | 
			
		||||
  0x36, 0xe4, 0x87, 0x3f, 0xad, 0x1a, 0xf2, 0x78, 0xcf, 0x79, 0x5f, 0x08, 0x2c, 0x2a, 0x8f, 0x45,
 | 
			
		||||
  0x33, 0x42, 0xdd, 0x80, 0x18, 0xac, 0x25, 0x6f, 0x98, 0xa7, 0x31, 0x3d, 0xc5, 0x07, 0x9d, 0x0b,
 | 
			
		||||
  0x8e, 0xcb, 0x09, 0x8b, 0x80, 0xf7, 0xbd, 0xa7, 0xd4, 0xb9, 0x1c, 0xcd, 0x36, 0xee, 0x94, 0x96,
 | 
			
		||||
  0xa6, 0x8b, 0x3b, 0x97, 0x76, 0xc4, 0xa3, 0x73, 0xb1, 0xa5, 0xfe, 0xed, 0x6f, 0x91, 0xc0, 0xf2,
 | 
			
		||||
  0x3c, 0xbf, 0x83, 0xf5, 0xad, 0x29, 0xee, 0x01, 0xe3, 0xeb, 0x9b, 0xd5, 0xa7, 0x37, 0xe1, 0x03,
 | 
			
		||||
  0x86, 0xd2, 0x1b, 0x13, 0xb2, 0x2f, 0x0e, 0x02, 0xaa, 0x11, 0xdc, 0xdd, 0x06, 0xd4, 0x8e, 0x60,
 | 
			
		||||
  0x0b, 0x70, 0xcf, 0x78, 0x44, 0x35, 0x1c, 0x68, 0xb2, 0xeb, 0x70, 0x5e, 0xef, 0xce, 0x13, 0xb4,
 | 
			
		||||
  0x2d, 0xf4, 0x8c, 0xf3, 0xe4, 0xaf, 0xe4, 0x1b, 0x8a, 0xf6, 0xbc, 0xcc, 0x16, 0x34, 0x75, 0x86,
 | 
			
		||||
  0x12, 0x43, 0xa2, 0xa4, 0x89, 0xec, 0x23, 0x68, 0xc8, 0x3a, 0x97, 0xcc, 0x66, 0x6c, 0xf2, 0xd8,
 | 
			
		||||
  0x91, 0xda, 0x14, 0x47, 0x7f, 0xe2, 0xca, 0x38, 0x9c, 0xb0, 0x59, 0xe7, 0xa8, 0x72, 0x6c, 0xb4,
 | 
			
		||||
  0x2f, 0x92, 0xff, 0xe6, 0xd6, 0x3f, 0xa0, 0x88, 0xa4, 0x8f, 0x02, 0xf9, 0x5f, 0x8a, 0xfd, 0x71,
 | 
			
		||||
  0x43, 0x48, 0xb9, 0xda, 0x11, 0xd6, 0x95, 0x72, 0x74, 0xe4, 0x80, 0x9c, 0x6c, 0xe8, 0x40, 0x88,
 | 
			
		||||
  0x12, 0x58, 0xf4, 0x5b, 0x73, 0xb9, 0x9f, 0xf8, 0x61, 0x9c, 0xb3, 0xd9, 0x30, 0xec, 0xb3, 0xe3,
 | 
			
		||||
  0x3f, 0xe3, 0x27, 0xdc, 0x5a, 0x16, 0x55, 0x49, 0x04, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/404.htm, do not edit!!
 | 
			
		||||
const char PAGE_404[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta charset="utf-8"><meta 
 | 
			
		||||
content="width=device-width" name="viewport"><meta name="theme-color" 
 | 
			
		||||
content="#222222"><title>Not found</title><style>
 | 
			
		||||
body{font-family:Verdana,Helvetica,sans-serif;text-align:center;background-color:#222;margin:0;color:#fff}img{width:400px;max-width:50%;image-rendering:pixelated;image-rendering:crisp-edges;margin:25px 0 -10px 0}button{outline:0;cursor:pointer;padding:8px;margin:10px;width:230px;text-transform:uppercase;font-family:helvetica;font-size:19px;background-color:#333;color:#fff;border:0 solid #fff;border-radius:25px}
 | 
			
		||||
</style></head><body><img alt="" 
 | 
			
		||||
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAbUExURQAAAAB81gCU/zKq/////9bW1oCAgGhoaAAAAGPLX8AAAAAJdFJOU///////////AFNPeBIAAAAJcEhZcwAADsAAAA7AAWrWiQkAAACdSURBVDhPxc9bDoUgEANQebP/FUuHMjBGY/B+3EYR7RH0qC/ZBc6HwCljgHO+xZIVSI2sYgHaG7EBWh8jWoxTrCBFdDJ+BD4lbIHxAcz8APAVLTsrZE4eQD5qzt3cAFTYokC4YCN9Gybgu4yAQtBFLQXHuHABA7JMeOEC/E0W5uy9gv4vo5QHK2i7yq2C8UABM4HmL+CSTXCTF1DrCX6+Gp9zB5dsAAAAAElFTkSuQmCC">
 | 
			
		||||
<h1>404 Not Found</h1><b>Akemi does not know where you are headed...</b><br><br>
 | 
			
		||||
<button onclick='window.location.href="/sliders"'>Back to controls</button>
 | 
			
		||||
</body></html>)=====";
 | 
			
		||||
const uint16_t PAGE_404_length = 868;
 | 
			
		||||
const uint8_t PAGE_404[] PROGMEM = {
 | 
			
		||||
  0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x65, 0x54, 0x5b, 0x73, 0xaa, 0x3a,
 | 
			
		||||
  0x14, 0x7e, 0xef, 0xaf, 0xe0, 0x78, 0xe6, 0xcc, 0x7e, 0x68, 0x2d, 0xa8, 0xd8, 0x2a, 0xa2, 0x33,
 | 
			
		||||
  0x01, 0x51, 0xec, 0xc5, 0x7a, 0xa3, 0xd6, 0xbe, 0x05, 0x12, 0x21, 0x15, 0x08, 0x4d, 0x82, 0x62,
 | 
			
		||||
  0x3b, 0xfd, 0xef, 0x3b, 0x40, 0xf7, 0x9c, 0xce, 0xec, 0x35, 0x03, 0x2b, 0xf9, 0x56, 0xd6, 0x7d,
 | 
			
		||||
  0x25, 0xe6, 0x3f, 0xe3, 0x27, 0x7b, 0xb3, 0x5b, 0x38, 0x4a, 0x24, 0x92, 0x78, 0x64, 0x7e, 0xff,
 | 
			
		||||
  0x31, 0x44, 0x23, 0x33, 0xc1, 0x02, 0x2a, 0x41, 0x04, 0x19, 0xc7, 0x62, 0xd8, 0xc8, 0xc5, 0xbe,
 | 
			
		||||
  0xd9, 0x6b, 0x7c, 0xa3, 0x17, 0x01, 0x4d, 0x05, 0x4e, 0x25, 0x7c, 0x22, 0x48, 0x44, 0x43, 0x84,
 | 
			
		||||
  0x8f, 0x24, 0xc0, 0xcd, 0x6a, 0xd3, 0x50, 0x52, 0x98, 0xe0, 0x61, 0xe3, 0x48, 0xf0, 0x29, 0xa3,
 | 
			
		||||
  0x4c, 0xfc, 0xd1, 0xa9, 0x51, 0x11, 0xe1, 0x04, 0x37, 0x03, 0x1a, 0x53, 0xd6, 0xf8, 0x61, 0xe6,
 | 
			
		||||
  0xdf, 0x76, 0x45, 0xf2, 0xac, 0x20, 0x22, 0xc6, 0xa3, 0x39, 0x15, 0xca, 0x9e, 0xe6, 0x29, 0x32,
 | 
			
		||||
  0xd5, 0x1a, 0x30, 0xb9, 0x38, 0x4b, 0x76, 0xe1, 0x53, 0x74, 0xfe, 0xdc, 0x4b, 0xb5, 0xe6, 0x1e,
 | 
			
		||||
  0x26, 0x24, 0x3e, 0x1b, 0xcf, 0x98, 0x21, 0x98, 0xc2, 0x2b, 0x17, 0xc7, 0x47, 0x2c, 0x48, 0x00,
 | 
			
		||||
  0xaf, 0x38, 0x4c, 0x79, 0x93, 0x63, 0x46, 0xf6, 0x03, 0x81, 0x0b, 0xd1, 0x84, 0x31, 0x09, 0x53,
 | 
			
		||||
  0x23, 0x90, 0x7e, 0x30, 0x1b, 0xf8, 0x30, 0x38, 0x84, 0xac, 0xb4, 0x5c, 0x07, 0x61, 0x94, 0x9e,
 | 
			
		||||
  0x07, 0x09, 0x64, 0x21, 0x49, 0x0d, 0x6d, 0xf0, 0x8d, 0xed, 0xf7, 0xfb, 0x2f, 0x92, 0x84, 0x9f,
 | 
			
		||||
  0x55, 0x42, 0x86, 0xae, 0x69, 0x59, 0x21, 0xcf, 0x14, 0x75, 0x82, 0x46, 0x57, 0xfb, 0x6f, 0x40,
 | 
			
		||||
  0x12, 0x18, 0xe2, 0x26, 0xc3, 0x29, 0x92, 0x8e, 0xd2, 0xd0, 0xc8, 0x48, 0x81, 0x63, 0x28, 0x30,
 | 
			
		||||
  0xfa, 0x4b, 0x12, 0x30, 0xc2, 0xb3, 0x26, 0x46, 0x21, 0xe6, 0x7f, 0xfc, 0xb4, 0xbb, 0x59, 0xa1,
 | 
			
		||||
  0x68, 0x4a, 0xb3, 0xa5, 0x95, 0xfc, 0xcb, 0xcf, 0x85, 0xa0, 0xe9, 0x27, 0xcd, 0x45, 0x4c, 0x52,
 | 
			
		||||
  0x5c, 0x46, 0x91, 0x33, 0x2e, 0xc3, 0xc8, 0x28, 0xa9, 0x62, 0xce, 0x20, 0x42, 0xa5, 0xa5, 0x5e,
 | 
			
		||||
  0x15, 0x45, 0x65, 0xa1, 0xd4, 0x1c, 0xd4, 0xd1, 0xb4, 0x3b, 0xe5, 0xba, 0xca, 0x54, 0x30, 0x99,
 | 
			
		||||
  0xfa, 0x9e, 0xb2, 0xc4, 0xc8, 0xb3, 0x0c, 0xb3, 0x00, 0x72, 0x3c, 0xf8, 0x59, 0xab, 0xe8, 0x4f,
 | 
			
		||||
  0x8d, 0x6a, 0x94, 0x93, 0x0f, 0x6c, 0xb4, 0xfa, 0x52, 0xfb, 0xef, 0xaa, 0x74, 0x3a, 0x9d, 0x1f,
 | 
			
		||||
  0xc5, 0x18, 0xf8, 0x94, 0xc9, 0x74, 0x0c, 0x4d, 0xe1, 0x34, 0x26, 0x48, 0xf9, 0x81, 0x35, 0x19,
 | 
			
		||||
  0x44, 0x24, 0xe7, 0x55, 0x4e, 0x5f, 0x17, 0xa6, 0x5a, 0xf7, 0xc9, 0x54, 0xeb, 0x19, 0x2a, 0xdb,
 | 
			
		||||
  0x35, 0x32, 0x65, 0x29, 0x15, 0x18, 0xcb, 0x36, 0xcb, 0x96, 0x73, 0x16, 0x0c, 0x1b, 0x08, 0x0a,
 | 
			
		||||
  0x68, 0x54, 0x85, 0x52, 0xb3, 0x34, 0x94, 0xee, 0x39, 0xbe, 0xd1, 0xaf, 0xc8, 0xb3, 0xf5, 0xb4,
 | 
			
		||||
  0x3a, 0x69, 0xf7, 0xd3, 0x90, 0x02, 0x49, 0xf3, 0xb5, 0x17, 0x39, 0x5e, 0x28, 0x57, 0x76, 0xb9,
 | 
			
		||||
  0x05, 0xa1, 0x0d, 0x1e, 0x25, 0xb3, 0x9c, 0x6c, 0xc6, 0xa6, 0x15, 0xf2, 0x32, 0x5f, 0xaf, 0xb4,
 | 
			
		||||
  0x19, 0x60, 0x5c, 0x0f, 0x6e, 0x96, 0x25, 0xb0, 0x4a, 0x97, 0x5e, 0xcb, 0x92, 0x0a, 0xc5, 0xdb,
 | 
			
		||||
  0xe9, 0xd8, 0xdb, 0x2d, 0xbd, 0x12, 0xf4, 0x3d, 0xa7, 0xf0, 0x56, 0x95, 0xdc, 0xea, 0xb5, 0x42,
 | 
			
		||||
  0xdb, 0x53, 0x3f, 0xee, 0xdf, 0xd5, 0x92, 0xfa, 0xfe, 0xb6, 0x45, 0x6d, 0x10, 0x4e, 0x23, 0x0a,
 | 
			
		||||
  0x4b, 0xf1, 0x74, 0xf1, 0xf0, 0xd2, 0xab, 0x2c, 0xdf, 0xa1, 0xc9, 0xdd, 0x93, 0xa7, 0xfe, 0x4f,
 | 
			
		||||
  0x60, 0x32, 0x5f, 0x60, 0x6b, 0x56, 0xc9, 0x02, 0x27, 0x7a, 0x0d, 0x4e, 0x00, 0x8c, 0x79, 0xb9,
 | 
			
		||||
  0xbd, 0x05, 0x60, 0xcb, 0xb6, 0x64, 0x79, 0x28, 0x03, 0x45, 0x6b, 0x6f, 0x65, 0x3d, 0x8f, 0xa3,
 | 
			
		||||
  0x45, 0x11, 0xf4, 0xfd, 0x31, 0xf5, 0x42, 0x07, 0xcc, 0x97, 0xd8, 0x5f, 0xa8, 0x13, 0x2f, 0x77,
 | 
			
		||||
  0x1f, 0xdf, 0xac, 0xe9, 0x4e, 0xb5, 0x2e, 0x3b, 0xce, 0x6e, 0x75, 0xbb, 0x72, 0xb5, 0x77, 0x5b,
 | 
			
		||||
  0x7d, 0xb5, 0x82, 0x1b, 0xf7, 0x64, 0xc7, 0x6f, 0xa1, 0xfb, 0x74, 0x59, 0xbc, 0xce, 0x9e, 0xd7,
 | 
			
		||||
  0xb3, 0x36, 0xdf, 0x85, 0x2e, 0x9c, 0xde, 0x3a, 0xd6, 0x36, 0xea, 0xbd, 0x6d, 0x69, 0xb1, 0x61,
 | 
			
		||||
  0xb6, 0x35, 0x41, 0xe3, 0xbb, 0x4b, 0x6b, 0xac, 0xc7, 0xfe, 0xcc, 0x2d, 0x40, 0xf0, 0xd1, 0x03,
 | 
			
		||||
  0x0b, 0xf0, 0xfc, 0xb0, 0xe1, 0xec, 0xd5, 0xd1, 0xf1, 0x72, 0xdc, 0x7d, 0xff, 0x10, 0x9d, 0x00,
 | 
			
		||||
  0x4c, 0x36, 0x3b, 0x7a, 0xb0, 0xf5, 0x9d, 0x3d, 0xef, 0x4f, 0xcf, 0x7e, 0x98, 0xeb, 0x67, 0xb0,
 | 
			
		||||
  0x14, 0xd6, 0xe4, 0x61, 0xf9, 0xe2, 0xe6, 0x2e, 0xb0, 0xc0, 0xed, 0xdd, 0x23, 0x7e, 0x72, 0x6c,
 | 
			
		||||
  0xd5, 0xd1, 0xb6, 0xdd, 0xfc, 0xdc, 0x0f, 0x8f, 0xfa, 0x91, 0x76, 0x97, 0xee, 0x7d, 0x9b, 0xdc,
 | 
			
		||||
  0x9e, 0xdf, 0xdb, 0x76, 0xcf, 0x03, 0xd6, 0xa3, 0xee, 0x26, 0x0f, 0x97, 0xf6, 0x7a, 0xf3, 0x62,
 | 
			
		||||
  0x6f, 0x26, 0xad, 0x31, 0xb3, 0x5f, 0x6e, 0x2e, 0xa7, 0x59, 0xff, 0xc3, 0xea, 0xa2, 0x2a, 0x5b,
 | 
			
		||||
  0xe0, 0xc4, 0x93, 0xcd, 0x61, 0x9d, 0x2f, 0x13, 0xdb, 0x6e, 0x8c, 0x2e, 0xcc, 0xa8, 0x35, 0xd2,
 | 
			
		||||
  0x35, 0x5d, 0x29, 0xef, 0xeb, 0xa4, 0xbe, 0xaf, 0x12, 0x31, 0xfd, 0x11, 0x38, 0xe0, 0x84, 0x28,
 | 
			
		||||
  0x88, 0x62, 0xae, 0xa4, 0x52, 0x76, 0x48, 0xe9, 0x49, 0x39, 0x45, 0x98, 0x61, 0xe5, 0x4c, 0x73,
 | 
			
		||||
  0x05, 0x4a, 0x5e, 0x0e, 0x08, 0x46, 0xd7, 0xd7, 0xd7, 0xa6, 0xea, 0x4b, 0x0d, 0x56, 0x7d, 0x17,
 | 
			
		||||
  0x66, 0x7d, 0x19, 0x14, 0x9a, 0x06, 0x31, 0x09, 0x0e, 0xc3, 0x5f, 0x27, 0x92, 0x22, 0x7a, 0xba,
 | 
			
		||||
  0x8e, 0x69, 0x00, 0x05, 0xa1, 0xe9, 0x75, 0xc4, 0xf0, 0x7e, 0xd8, 0x50, 0xb9, 0x1c, 0x43, 0xcc,
 | 
			
		||||
  0x78, 0xe3, 0xd7, 0xc8, 0x92, 0xb3, 0xab, 0x08, 0xaa, 0x94, 0x6f, 0x09, 0xa3, 0x31, 0x97, 0xe6,
 | 
			
		||||
  0x2a, 0x13, 0xd2, 0x96, 0x5a, 0x8f, 0x9f, 0x5a, 0xbd, 0x6a, 0xbf, 0x01, 0x22, 0xc8, 0xb7, 0x64,
 | 
			
		||||
  0xeb, 0x04, 0x00, 0x00
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Autogenerated from wled00/data/favicon.ico, do not edit!!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1333
									
								
								wled00/html_simple.h
								
								
								
								
							
							
						
						
									
										1333
									
								
								wled00/html_simple.h
								
								
								
								
							
										
											
												Plik diff jest za duży
												Load Diff
											
										
									
								
							
							
								
								
									
										3843
									
								
								wled00/html_ui.h
								
								
								
								
							
							
						
						
									
										3843
									
								
								wled00/html_ui.h
								
								
								
								
							
										
											
												Plik diff jest za duży
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
// version code in format yymmddb (b = daily build)
 | 
			
		||||
#define VERSION 2112031
 | 
			
		||||
#define VERSION 2112061
 | 
			
		||||
 | 
			
		||||
//uncomment this if you have a "my_config.h" file you'd like to use
 | 
			
		||||
//#define WLED_USE_MY_CONFIG
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,15 +63,25 @@ void initServer()
 | 
			
		|||
  DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Methods"), "*");
 | 
			
		||||
  DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Headers"), "*");
 | 
			
		||||
 | 
			
		||||
 #ifdef WLED_ENABLE_WEBSOCKETS
 | 
			
		||||
    server.on("/liveview", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
      request->send_P(200, "text/html", PAGE_liveviewws);
 | 
			
		||||
    });
 | 
			
		||||
 #else
 | 
			
		||||
    server.on("/liveview", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
      request->send_P(200, "text/html", PAGE_liveview);
 | 
			
		||||
    });
 | 
			
		||||
  #endif
 | 
			
		||||
#ifdef WLED_ENABLE_WEBSOCKETS
 | 
			
		||||
  server.on("/liveview", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    if (handleIfNoneMatchCacheHeader(request)) return;
 | 
			
		||||
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_liveviewws, PAGE_liveviewws_length);
 | 
			
		||||
    response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
    setStaticContentCacheHeaders(response);
 | 
			
		||||
    request->send(response);
 | 
			
		||||
    //request->send_P(200, "text/html", PAGE_liveviewws);
 | 
			
		||||
  });
 | 
			
		||||
#else
 | 
			
		||||
  server.on("/liveview", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    if (handleIfNoneMatchCacheHeader(request)) return;
 | 
			
		||||
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_liveview, PAGE_liveview_length);
 | 
			
		||||
    response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
    setStaticContentCacheHeaders(response);
 | 
			
		||||
    request->send(response);
 | 
			
		||||
    //request->send_P(200, "text/html", PAGE_liveview);
 | 
			
		||||
  });
 | 
			
		||||
#endif
 | 
			
		||||
  
 | 
			
		||||
  //settings page
 | 
			
		||||
  server.on("/settings", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
| 
						 | 
				
			
			@ -153,27 +163,32 @@ void initServer()
 | 
			
		|||
 | 
			
		||||
  server.on("/version", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    request->send(200, "text/plain", (String)VERSION);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
    
 | 
			
		||||
  server.on("/uptime", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    request->send(200, "text/plain", (String)millis());
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
    
 | 
			
		||||
  server.on("/freeheap", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    request->send(200, "text/plain", (String)ESP.getFreeHeap());
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  server.on("/u", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    request->send_P(200, "text/html", PAGE_usermod);
 | 
			
		||||
    });
 | 
			
		||||
    if (handleIfNoneMatchCacheHeader(request)) return;
 | 
			
		||||
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_usermod, PAGE_usermod_length);
 | 
			
		||||
    response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
    setStaticContentCacheHeaders(response);
 | 
			
		||||
    request->send(response);
 | 
			
		||||
    //request->send_P(200, "text/html", PAGE_usermod);
 | 
			
		||||
  });
 | 
			
		||||
    
 | 
			
		||||
  server.on("/url", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    URL_response(request);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
    
 | 
			
		||||
  server.on("/teapot", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
    serveMessage(request, 418, F("418. I'm a teapot."), F("(Tangible Embedded Advanced Project Of Twinkling)"), 254);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  server.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request) {},
 | 
			
		||||
        [](AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data,
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +236,11 @@ void initServer()
 | 
			
		|||
    //init ota page
 | 
			
		||||
    #ifndef WLED_DISABLE_OTA
 | 
			
		||||
    server.on("/update", HTTP_GET, [](AsyncWebServerRequest *request){
 | 
			
		||||
      request->send_P(200, "text/html", PAGE_update);
 | 
			
		||||
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_update, PAGE_update_length);
 | 
			
		||||
      response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
      setStaticContentCacheHeaders(response);
 | 
			
		||||
      request->send(response);
 | 
			
		||||
      //request->send_P(200, "text/html", PAGE_update);
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    server.on("/update", HTTP_POST, [](AsyncWebServerRequest *request){
 | 
			
		||||
| 
						 | 
				
			
			@ -303,7 +322,11 @@ void initServer()
 | 
			
		|||
    if(espalexa.handleAlexaApiCall(request)) return;
 | 
			
		||||
    #endif
 | 
			
		||||
    if(handleFileRead(request, request->url())) return;
 | 
			
		||||
    request->send_P(404, "text/html", PAGE_404);
 | 
			
		||||
    AsyncWebServerResponse *response = request->beginResponse_P(404, "text/html", PAGE_404, PAGE_404_length);
 | 
			
		||||
    response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
    setStaticContentCacheHeaders(response);
 | 
			
		||||
    request->send(response);
 | 
			
		||||
    //request->send_P(404, "text/html", PAGE_404);
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -408,21 +431,22 @@ void serveMessage(AsyncWebServerRequest* request, uint16_t code, const String& h
 | 
			
		|||
 | 
			
		||||
String settingsProcessor(const String& var)
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
  if (var == "CSS") {
 | 
			
		||||
    char buf[SETTINGS_STACK_BUF_SIZE];
 | 
			
		||||
    buf[0] = 0;
 | 
			
		||||
    getSettingsJS(optionType, buf);
 | 
			
		||||
    obuf = buf;
 | 
			
		||||
    oappend(SET_F("}</script>"));
 | 
			
		||||
    return String(buf);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
*/
 | 
			
		||||
  #ifdef WLED_ENABLE_DMX
 | 
			
		||||
 | 
			
		||||
  if (var == "DMXMENU") {
 | 
			
		||||
    return String(F("<form action=/settings/dmx><button type=submit>DMX Output</button></form>"));
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  #endif
 | 
			
		||||
  if (var == "SCSS") return String(FPSTR(PAGE_settingsCss));
 | 
			
		||||
  //if (var == "SCSS") return String(FPSTR(PAGE_settingsCss));
 | 
			
		||||
  return String();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -447,13 +471,32 @@ String dmxProcessor(const String& var)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void serveSettingsJS(AsyncWebServerRequest* request)
 | 
			
		||||
{
 | 
			
		||||
  char buf[SETTINGS_STACK_BUF_SIZE+37];
 | 
			
		||||
  buf[0] = 0;
 | 
			
		||||
  byte subPage = request->arg(F("p")).toInt();
 | 
			
		||||
  if (!subPage || subPage>8) {
 | 
			
		||||
    strcpy_P(buf, PSTR("alert('Settings for this request are not implemented.');"));
 | 
			
		||||
    request->send(501, "application/javascript", buf);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  strcat_P(buf,PSTR("function GetV(){var d=document;"));
 | 
			
		||||
  getSettingsJS(subPage, buf+strlen(buf));  // this may overflow by 35bytes!!!
 | 
			
		||||
  strcat_P(buf,PSTR("}"));
 | 
			
		||||
  request->send(200, "application/javascript", buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void serveSettings(AsyncWebServerRequest* request, bool post)
 | 
			
		||||
{
 | 
			
		||||
  byte subPage = 0;
 | 
			
		||||
  const String& url = request->url();
 | 
			
		||||
  if (url.indexOf("sett") >= 0) 
 | 
			
		||||
  {
 | 
			
		||||
    if      (url.indexOf("wifi") > 0) subPage = 1;
 | 
			
		||||
    if      (url.indexOf(".js")  > 0) subPage = 254;
 | 
			
		||||
    else if (url.indexOf(".css") > 0) subPage = 253;
 | 
			
		||||
    else if (url.indexOf("wifi") > 0) subPage = 1;
 | 
			
		||||
    else if (url.indexOf("leds") > 0) subPage = 2;
 | 
			
		||||
    else if (url.indexOf("ui")   > 0) subPage = 3;
 | 
			
		||||
    else if (url.indexOf("sync") > 0) subPage = 4;
 | 
			
		||||
| 
						 | 
				
			
			@ -502,17 +545,24 @@ void serveSettings(AsyncWebServerRequest* request, bool post)
 | 
			
		|||
 | 
			
		||||
  optionType = subPage;
 | 
			
		||||
  
 | 
			
		||||
  AsyncWebServerResponse *response;
 | 
			
		||||
  switch (subPage)
 | 
			
		||||
  {
 | 
			
		||||
    case 1:   request->send_P(200, "text/html", PAGE_settings_wifi, settingsProcessor); break;
 | 
			
		||||
    case 2:   request->send_P(200, "text/html", PAGE_settings_leds, settingsProcessor); break;
 | 
			
		||||
    case 3:   request->send_P(200, "text/html", PAGE_settings_ui  , settingsProcessor); break;
 | 
			
		||||
    case 4:   request->send_P(200, "text/html", PAGE_settings_sync, settingsProcessor); break;
 | 
			
		||||
    case 5:   request->send_P(200, "text/html", PAGE_settings_time, settingsProcessor); break;
 | 
			
		||||
    case 6:   request->send_P(200, "text/html", PAGE_settings_sec , settingsProcessor); break;
 | 
			
		||||
    case 7:   request->send_P(200, "text/html", PAGE_settings_dmx , settingsProcessor); break;
 | 
			
		||||
    case 8:   request->send_P(200, "text/html", PAGE_settings_um  , settingsProcessor); break;
 | 
			
		||||
    case 255: request->send_P(200, "text/html", PAGE_welcome); break;
 | 
			
		||||
    default:  request->send_P(200, "text/html", PAGE_settings     , settingsProcessor); 
 | 
			
		||||
    case 1:   response = request->beginResponse_P(200, "text/html", PAGE_settings_wifi, PAGE_settings_wifi_length); break;
 | 
			
		||||
    case 2:   response = request->beginResponse_P(200, "text/html", PAGE_settings_leds, PAGE_settings_leds_length); break;
 | 
			
		||||
    case 3:   response = request->beginResponse_P(200, "text/html", PAGE_settings_ui,   PAGE_settings_ui_length);   break;
 | 
			
		||||
    case 4:   response = request->beginResponse_P(200, "text/html", PAGE_settings_sync, PAGE_settings_sync_length); break;
 | 
			
		||||
    case 5:   response = request->beginResponse_P(200, "text/html", PAGE_settings_time, PAGE_settings_time_length); break;
 | 
			
		||||
    case 6:   response = request->beginResponse_P(200, "text/html", PAGE_settings_sec,  PAGE_settings_sec_length);  break;
 | 
			
		||||
    case 7:   response = request->beginResponse_P(200, "text/html", PAGE_settings_dmx,  PAGE_settings_dmx_length);  break;
 | 
			
		||||
    case 8:   response = request->beginResponse_P(200, "text/html", PAGE_settings_um,   PAGE_settings_um_length);   break;
 | 
			
		||||
    case 253: response = request->beginResponse_P(200, "text/css",  PAGE_settingsCss,   PAGE_settingsCss_length);   break;
 | 
			
		||||
    case 254: serveSettingsJS(request); return;
 | 
			
		||||
    case 255: response = request->beginResponse_P(200, "text/html", PAGE_welcome,       PAGE_welcome_length);       break;
 | 
			
		||||
    default:  request->send_P(200, "text/html", PAGE_settings, settingsProcessor); return;
 | 
			
		||||
    //default:  response = request->beginResponse_P(200, "text/html", PAGE_settings, PAGE_settings_length); break;
 | 
			
		||||
  }
 | 
			
		||||
  response->addHeader(F("Content-Encoding"),"gzip");
 | 
			
		||||
  setStaticContentCacheHeaders(response);
 | 
			
		||||
  request->send(response);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -600,6 +600,4 @@ void getSettingsJS(byte subPage, char* dest)
 | 
			
		|||
    oappendi(usermods.getModCount());
 | 
			
		||||
    oappend(";");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  oappend(SET_F("}</script>"));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue