Skip to content

Commit f2043dc

Browse files
authored
Merge pull request wled#2219 from blazoncek/analog-invert
Fix for missing inverted analog.
2 parents 8fae964 + e416ec9 commit f2043dc

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

wled00/data/settings_leds.htm

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@
140140
}
141141
}
142142
if (type == 30 || type == 31 || (type > 40 && type < 46 && type != 43)) isRGBW = true;
143-
gId("dig"+n).style.display = (type > 31 && type < 48) ? "none":"inline";
143+
gId("dig"+n+"c").style.display = (type > 40 && type < 48) ? "none":"inline"; // hide count for analog
144+
gId("dig"+n+"s").style.display = (type > 40 && type < 48) ? "none":"inline"; // hide skip 1st for virtual & analog
145+
gId("rev"+n).innerHTML = (type > 40 && type < 48) ? "Inverted":"Reverse (rotated 180°)"; // change reverse text for analog
144146
gId("psd"+n).innerHTML = (type > 31 && type < 48) ? "Index:":"Start:";
145147
}
146148
}
@@ -270,11 +272,10 @@
270272
<span id="p4d${i}"></span><input type="number" class="xs" name="L4${i}" min="0" max="33" onchange="UI()"/>
271273
<br>
272274
<span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" min="0" max="8191" value="${lastEnd(i)}" required />&nbsp;
273-
<div id="dig${i}" style="display:inline">
274-
Count: <input type="number" name="LC${i}" min="0" max="${maxPB}" value="1" required oninput="UI()" /><br>
275-
Reverse (rotated 180°): <input type="checkbox" name="CV${i}">
276-
&nbsp;Skip 1<sup>st</sup> LED: <input id="sl${i}" type="checkbox" name="SL${i}"><br>
277-
</div>
275+
<div id="dig${i}c" style="display:inline">Count: <input type="number" name="LC${i}" class="l" min="0" max="${maxPB}" value="1" required oninput="UI()" /></div>
276+
<br>
277+
<div id="dig${i}r" style="display:inline"><span id="rev${i}">Reverse</span>: <input type="checkbox" name="CV${i}"></div>&nbsp;
278+
<div id="dig${i}s" style="display:inline">Skip 1<sup>st</sup> LED: <input id="sl${i}" type="checkbox" name="SL${i}"></div>
278279
</div>`;
279280
f.insertAdjacentHTML("beforeend", cn);
280281
}

wled00/html_settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ onclick="B()">Back</button><button type="submit">Save & Connect</button></form>
7777
// Autogenerated from wled00/data/settings_leds.htm, do not edit!!
7878
const char PAGE_settings_leds[] PROGMEM = R"=====(<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta
7979
name="viewport" content="width=500"><title>LED Settings</title><script>
80-
var timeout,d=document,laprev=55,maxB=1,maxM=5e3,maxPB=4096,bquot=0;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings")}function B(){window.open("/settings","_self")}function gId(e){return d.getElementById(e)}function off(e){d.getElementsByName(e)[0].value=-1}function showToast(e,n=!1){var t=gId("toast");t.innerHTML=e,t.className=n?"error":"show",clearTimeout(timeout),t.style.animation="none",timeout=setTimeout((function(){t.className=t.className.replace("show","")}),2900)}function bLimits(e,n,t){maxB=e,maxM=t,maxPB=n}function pinsOK(){var e=d.getElementsByTagName("input");for(i=0;i<e.length;i++){var n=e[i].name.substring(0,2);if(("L0"==n||"L1"==n||"L2"==n||"L3"==n||"L4"==n||"RL"==n||"BT"==n||"IR"==n)&&""!=e[i].value&&"-1"!=e[i].value){if(d.um_p&&d.um_p.some(n=>n==parseInt(e[i].value,10)))return alert(`Sorry, pins ${JSON.stringify(d.um_p)} can't be used.`),e[i].value="",e[i].focus(),!1;if(e[i].value>5&&e[i].value<12)return alert("Sorry, pins 6-11 can not be used."),e[i].value="",e[i].focus(),!1;for(j=i+1;j<e.length;j++){var t=e[j].name.substring(0,2);if(("L0"==t||"L1"==t||"L2"==t||"L3"==t||"L4"==t||"RL"==t||"BT"==t||"IR"==t)&&""!=e[j].value&&e[i].value==e[j].value)return alert(`Pin conflict between ${n}/${t}!`),e[j].value="",e[j].focus(),!1}}}return!0}function trySubmit(e){if(e.preventDefault(),!pinsOK())return e.stopPropagation(),!1;if(bquot>100){var n="Too many LEDs for me to handle!";maxM<1e4&&(n+="\n\rConsider using an ESP32."),alert(n)}d.Sf.checkValidity()&&d.Sf.submit()}function S(){GetV(),setABL()}function enABL(){var e=gId("able").checked;d.Sf.LA.value=e?laprev:0,gId("abl").style.display=e?"inline":"none",gId("psu2").style.display=e?"inline":"none",d.Sf.LA.value>0&&setABL()}function enLA(){var e=d.Sf.LAsel.value;d.Sf.LA.value=e,gId("LAdis").style.display=50==e?"inline":"none",UI()}function setABL(){switch(gId("able").checked=!0,d.Sf.LAsel.value=50,parseInt(d.Sf.LA.value)){case 0:gId("able").checked=!1,enABL();break;case 30:d.Sf.LAsel.value=30;break;case 35:d.Sf.LAsel.value=35;break;case 55:d.Sf.LAsel.value=55;break;case 255:d.Sf.LAsel.value=255;break;default:gId("LAdis").style.display="inline"}gId("m1").innerHTML=maxM,d.getElementsByName("Sf")[0].addEventListener("submit",trySubmit),UI()}function getMem(e,n,t){return e<32?maxM<1e4&&3==t?e>29?20*n:15*n:maxM>=1e4?e>29?8*n:6*n:e>29?4*n:3*n:e>31&&e<48?5:44==e||45==e?4*n:3*n}function UI(e=!1){var n=!1,t=0;gId("ampwarning").style.display=d.Sf.MA.value>7200?"inline":"none",255==d.Sf.LA.value?laprev=12:d.Sf.LA.value>0&&(laprev=d.Sf.LA.value);var a=d.getElementsByTagName("select");for(u=0;u<a.length;u++)if("LT"==a[u].name.substring(0,2)){L=a[u].name.substring(2);var i=parseInt(a[u].value,10);gId("p0d"+L).innerHTML=i>49?"Data:":i>41?"Pins:":"Pin:",gId("p1d"+L).innerHTML=i>49?"Clk:":"";var o=d.getElementsByName("L1"+L)[0];for(t+=getMem(i,d.getElementsByName("LC"+L)[0].value,d.getElementsByName("L0"+L)[0].value),c=1;c<5;c++){(o=d.getElementsByName("L"+c+L)[0])&&(i>49&&1==c||i>41&&i<50&&c+40<i?(o.style.display="inline",o.required=!0):(o.style.display="none",o.required=!1,o.value=""))}(30==i||31==i||i>40&&i<46&&43!=i)&&(n=!0),gId("dig"+L).style.display=i>31&&i<48?"none":"inline",gId("psd"+L).innerHTML=i>31&&i<48?"Index:":"Start:"}var s=d.querySelectorAll(".wc"),l=s.length;for(u=0;u<l;u++)s[u].style.display=n?"inline":"none";if(d.activeElement==d.getElementsByName("LC")[0]){var u=d.getElementsByClassName("iST").length;1==u&&(d.getElementsByName("LC0")[0].value=d.getElementsByName("LC")[0].value)}var r=d.getElementsByTagName("input"),p=0,m=0;for(u=0;u<r.length;u++){var v=r[u].name.substring(0,2);if("LC"!=v||"LC"===r[u].name){if("L0"==v||"L1"==v)d.getElementsByName("LC"+r[u].name.substring(2))[0].max=maxPB;if(("L0"==v||"L1"==v||"L2"==v||"L3"==v||"L4"==v||"RL"==v||"BT"==v||"IR"==v)&&""!=r[u].value&&"-1"!=r[u].value){var c=[];if(d.um_p&&Array.isArray(d.um_p))for(k=0;k<d.um_p.length;k++)c.push(d.um_p[k]);for(j=0;j<r.length;j++)if(u!=j){var g=r[j].name.substring(0,2);"L0"!=g&&"L1"!=g&&"L2"!=g&&"L3"!=g&&"L4"!=g&&"RL"!=g&&"BT"!=g&&"IR"!=g||""!=r[j].value&&"-1"!=r[j].value&&c.push(parseInt(r[j].value,10))}c.some(e=>e==parseInt(r[u].value,10))?r[u].style.color="red":r[u].style.color="#fff"}}else{var L=r[u].name.substring(2),f=parseInt(r[u].value,10);gId("ls"+L).readOnly&&(gId("ls"+L).value=p),f&&(p+=f,f>m&&(m=f))}}gId("m0").innerHTML=t,bquot=t/maxM*100,gId("dbar").style.background=`linear-gradient(90deg, ${bquot>60?bquot>90?"red":"orange":"#ccc"} 0 ${bquot}%%, #444 ${bquot}%% 100%%)`,gId("ledwarning").style.display=p>maxPB||m>800||bquot>80?"inline":"none",gId("ledwarning").style.color=p>maxPB||m>maxPB||bquot>100?"red":"orange",gId("wreason").innerHTML=bquot>80?"80% of max. LED memory"+(bquot>100?` (<b>WARNING: Using over ${maxM}B!</b>)`:""):"800 LEDs per pin";var y=Math.ceil((100+p*laprev)/500)/2;y=y>5?Math.ceil(y):y;a="";var b=30==d.Sf.LAsel.value,I=255==d.Sf.LAsel.value;y<1.02&&!b&&!I?a="ESP 5V pin with 1A USB supply":(a+=b?"12V ":I?"WS2815 12V ":"5V ",a+=y,a+="A supply connected to LEDs");var B=Math.ceil((100+p*laprev)/1500)/2,S="(for most effects, ~";S+=B=B>5?Math.ceil(B):B,S+="A is enough)<br>",gId("psu").innerHTML=a,gId("psu2").innerHTML=I?"":S,gId("json").style.display=8==d.Sf.IT.value?"":"none"}function lastEnd(e){if(e<1)return 0;v=parseInt(d.getElementsByName("LS"+(e-1))[0].value)+parseInt(d.getElementsByName("LC"+(e-1))[0].value);var n=parseInt(d.getElementsByName("LT"+(e-1))[0].value);return n>31&&n<48&&(v=1),isNaN(v)?0:v}function addLEDs(e){if(e>1)return maxB=e,void(gId("+").style.display="inline");var n=d.getElementsByClassName("iST"),t=n.length;if(!(1==e&&t>=maxB||-1==e&&0==t)){var a=gId("mLC");if(1==e){var i=`<div class="iST">\n${t>0?'<hr style="width:260px">':""}\n${t+1}:\n<select name="LT${t}" onchange="UI()">\n<option value="22">WS281x</option>\n<option value="30">SK6812 RGBW</option>\n<option value="31">TM1814</option>\n<option value="24">400kHz</option>\n<option value="50">WS2801</option>\n<option value="51">APA102</option>\n<option value="52">LPD8806</option>\n<option value="53">P9813</option>\n<option value="41">PWM White</option>\n<option value="42">PWM WWCW</option>\n<option value="43">PWM RGB</option>\n<option value="44">PWM RGBW</option>\n<option value="45">PWM RGBWC</option>\n</select>&nbsp;\nColor Order:\n<select name="CO${t}">\n<option value="0">GRB</option>\n<option value="1">RGB</option>\n<option value="2">BRG</option>\n<option value="3">RBG</option>\n<option value="4">BGR</option>\n<option value="5">GBR</option>\n</select><br>\n<span id="p0d${t}">Pin:</span> <input type="number" class="xs" name="L0${t}" min="0" max="33" required onchange="UI()"/>\n<span id="p1d${t}">Clock:</span> <input type="number" class="xs" name="L1${t}" min="0" max="33" onchange="UI()"/>\n<span id="p2d${t}"></span><input type="number" class="xs" name="L2${t}" min="0" max="33" onchange="UI()"/>\n<span id="p3d${t}"></span><input type="number" class="xs" name="L3${t}" min="0" max="33" onchange="UI()"/>\n<span id="p4d${t}"></span><input type="number" class="xs" name="L4${t}" min="0" max="33" onchange="UI()"/>\n<br>\n<span id="psd${t}">Start:</span> <input type="number" name="LS${t}" id="ls${t}" min="0" max="8191" value="${lastEnd(t)}" required />&nbsp;\n<div id="dig${t}" style="display:inline">\nCount: <input type="number" name="LC${t}" min="0" max="${maxPB}" value="1" required oninput="UI()" /><br>\nReverse (rotated 180°): <input type="checkbox" name="CV${t}">\n&nbsp;Skip 1<sup>st</sup> LED: <input id="sl${t}" type="checkbox" name="SL${t}"><br>\n</div>\n</div>`;a.insertAdjacentHTML("beforeend",i)}-1==e&&(n[--t].remove(),--t),gId("+").style.display=t<maxB-1?"inline":"none",gId("-").style.display=t>0?"inline":"none",UI()}}function addBtn(e,n,t){var a=gId("btns").innerHTML,i="BT"+e;a+=`Button ${e} pin: <input type="number" class="xs" min="-1" max="40" name="${i}" onchange="UI()" value="${n}">&nbsp;`,a+=`<select name="${"BE"+e}">`,a+=`<option value="0" ${0==t?"selected":""}>Disabled</option>`,a+=`<option value="2" ${2==t?"selected":""}>Pushbutton</option>`,a+=`<option value="3" ${3==t?"selected":""}>Push inverted</option>`,a+=`<option value="4" ${4==t?"selected":""}>Switch</option>`,a+=`<option value="5" ${5==t?"selected":""}>PIR sensor</option>`,a+=`<option value="6" ${6==t?"selected":""}>Touch</option>`,a+=`<option value="7" ${7==t?"selected":""}>Analog</option>`,a+=`<option value="8" ${8==t?"selected":""}>Analog inverted</option>`,a+="</select>",a+=`<span style="cursor: pointer;" onclick="off('${i}')">&nbsp;&#215;</span><br>`,gId("btns").innerHTML=a}function uploadFile(e){var n=new XMLHttpRequest;n.addEventListener("load",(function(){showToast(this.responseText)})),n.addEventListener("error",(function(e){showToast(e.stack,!0)})),n.open("POST","/upload");var t=new FormData;return t.append("data",d.Sf.data.files[0],e),n.send(t),d.Sf.data.value="",!1}function GetV() {var d=document;
80+
var timeout,d=document,laprev=55,maxB=1,maxM=5e3,maxPB=4096,bquot=0;function H(){window.open("https://github.com/Aircoookie/WLED/wiki/Settings#led-settings")}function B(){window.open("/settings","_self")}function gId(e){return d.getElementById(e)}function off(e){d.getElementsByName(e)[0].value=-1}function showToast(e,n=!1){var t=gId("toast");t.innerHTML=e,t.className=n?"error":"show",clearTimeout(timeout),t.style.animation="none",timeout=setTimeout((function(){t.className=t.className.replace("show","")}),2900)}function bLimits(e,n,t){maxB=e,maxM=t,maxPB=n}function pinsOK(){var e=d.getElementsByTagName("input");for(i=0;i<e.length;i++){var n=e[i].name.substring(0,2);if(("L0"==n||"L1"==n||"L2"==n||"L3"==n||"L4"==n||"RL"==n||"BT"==n||"IR"==n)&&""!=e[i].value&&"-1"!=e[i].value){if(d.um_p&&d.um_p.some(n=>n==parseInt(e[i].value,10)))return alert(`Sorry, pins ${JSON.stringify(d.um_p)} can't be used.`),e[i].value="",e[i].focus(),!1;if(e[i].value>5&&e[i].value<12)return alert("Sorry, pins 6-11 can not be used."),e[i].value="",e[i].focus(),!1;for(j=i+1;j<e.length;j++){var t=e[j].name.substring(0,2);if(("L0"==t||"L1"==t||"L2"==t||"L3"==t||"L4"==t||"RL"==t||"BT"==t||"IR"==t)&&""!=e[j].value&&e[i].value==e[j].value)return alert(`Pin conflict between ${n}/${t}!`),e[j].value="",e[j].focus(),!1}}}return!0}function trySubmit(e){if(e.preventDefault(),!pinsOK())return e.stopPropagation(),!1;if(bquot>100){var n="Too many LEDs for me to handle!";maxM<1e4&&(n+="\n\rConsider using an ESP32."),alert(n)}d.Sf.checkValidity()&&d.Sf.submit()}function S(){GetV(),setABL()}function enABL(){var e=gId("able").checked;d.Sf.LA.value=e?laprev:0,gId("abl").style.display=e?"inline":"none",gId("psu2").style.display=e?"inline":"none",d.Sf.LA.value>0&&setABL()}function enLA(){var e=d.Sf.LAsel.value;d.Sf.LA.value=e,gId("LAdis").style.display=50==e?"inline":"none",UI()}function setABL(){switch(gId("able").checked=!0,d.Sf.LAsel.value=50,parseInt(d.Sf.LA.value)){case 0:gId("able").checked=!1,enABL();break;case 30:d.Sf.LAsel.value=30;break;case 35:d.Sf.LAsel.value=35;break;case 55:d.Sf.LAsel.value=55;break;case 255:d.Sf.LAsel.value=255;break;default:gId("LAdis").style.display="inline"}gId("m1").innerHTML=maxM,d.getElementsByName("Sf")[0].addEventListener("submit",trySubmit),UI()}function getMem(e,n,t){return e<32?maxM<1e4&&3==t?e>29?20*n:15*n:maxM>=1e4?e>29?8*n:6*n:e>29?4*n:3*n:e>31&&e<48?5:44==e||45==e?4*n:3*n}function UI(e=!1){var n=!1,t=0;gId("ampwarning").style.display=d.Sf.MA.value>7200?"inline":"none",255==d.Sf.LA.value?laprev=12:d.Sf.LA.value>0&&(laprev=d.Sf.LA.value);var a=d.getElementsByTagName("select");for(u=0;u<a.length;u++)if("LT"==a[u].name.substring(0,2)){L=a[u].name.substring(2);var i=parseInt(a[u].value,10);gId("p0d"+L).innerHTML=i>49?"Data:":i>41?"Pins:":"Pin:",gId("p1d"+L).innerHTML=i>49?"Clk:":"";var s=d.getElementsByName("L1"+L)[0];for(t+=getMem(i,d.getElementsByName("LC"+L)[0].value,d.getElementsByName("L0"+L)[0].value),c=1;c<5;c++){(s=d.getElementsByName("L"+c+L)[0])&&(i>49&&1==c||i>41&&i<50&&c+40<i?(s.style.display="inline",s.required=!0):(s.style.display="none",s.required=!1,s.value=""))}(30==i||31==i||i>40&&i<46&&43!=i)&&(n=!0),gId("dig"+L+"c").style.display=i>40&&i<48?"none":"inline",gId("dig"+L+"s").style.display=i>40&&i<48?"none":"inline",gId("rev"+L).innerHTML=i>40&&i<48?"Inverted":"Reverse (rotated 180°)",gId("psd"+L).innerHTML=i>31&&i<48?"Index:":"Start:"}var l=d.querySelectorAll(".wc"),o=l.length;for(u=0;u<o;u++)l[u].style.display=n?"inline":"none";if(d.activeElement==d.getElementsByName("LC")[0]){var u=d.getElementsByClassName("iST").length;1==u&&(d.getElementsByName("LC0")[0].value=d.getElementsByName("LC")[0].value)}var r=d.getElementsByTagName("input"),p=0,m=0;for(u=0;u<r.length;u++){var v=r[u].name.substring(0,2);if("LC"!=v||"LC"===r[u].name){if("L0"==v||"L1"==v)d.getElementsByName("LC"+r[u].name.substring(2))[0].max=maxPB;if(("L0"==v||"L1"==v||"L2"==v||"L3"==v||"L4"==v||"RL"==v||"BT"==v||"IR"==v)&&""!=r[u].value&&"-1"!=r[u].value){var c=[];if(d.um_p&&Array.isArray(d.um_p))for(k=0;k<d.um_p.length;k++)c.push(d.um_p[k]);for(j=0;j<r.length;j++)if(u!=j){var g=r[j].name.substring(0,2);"L0"!=g&&"L1"!=g&&"L2"!=g&&"L3"!=g&&"L4"!=g&&"RL"!=g&&"BT"!=g&&"IR"!=g||""!=r[j].value&&"-1"!=r[j].value&&c.push(parseInt(r[j].value,10))}c.some(e=>e==parseInt(r[u].value,10))?r[u].style.color="red":r[u].style.color="#fff"}}else{var L=r[u].name.substring(2),f=parseInt(r[u].value,10);gId("ls"+L).readOnly&&(gId("ls"+L).value=p),f&&(p+=f,f>m&&(m=f))}}gId("m0").innerHTML=t,bquot=t/maxM*100,gId("dbar").style.background=`linear-gradient(90deg, ${bquot>60?bquot>90?"red":"orange":"#ccc"} 0 ${bquot}%%, #444 ${bquot}%% 100%%)`,gId("ledwarning").style.display=p>maxPB||m>800||bquot>80?"inline":"none",gId("ledwarning").style.color=p>maxPB||m>maxPB||bquot>100?"red":"orange",gId("wreason").innerHTML=bquot>80?"80% of max. LED memory"+(bquot>100?` (<b>WARNING: Using over ${maxM}B!</b>)`:""):"800 LEDs per pin";var y=Math.ceil((100+p*laprev)/500)/2;y=y>5?Math.ceil(y):y;a="";var b=30==d.Sf.LAsel.value,I=255==d.Sf.LAsel.value;y<1.02&&!b&&!I?a="ESP 5V pin with 1A USB supply":(a+=b?"12V ":I?"WS2815 12V ":"5V ",a+=y,a+="A supply connected to LEDs");var B=Math.ceil((100+p*laprev)/1500)/2,S="(for most effects, ~";S+=B=B>5?Math.ceil(B):B,S+="A is enough)<br>",gId("psu").innerHTML=a,gId("psu2").innerHTML=I?"":S,gId("json").style.display=8==d.Sf.IT.value?"":"none"}function lastEnd(e){if(e<1)return 0;v=parseInt(d.getElementsByName("LS"+(e-1))[0].value)+parseInt(d.getElementsByName("LC"+(e-1))[0].value);var n=parseInt(d.getElementsByName("LT"+(e-1))[0].value);return n>31&&n<48&&(v=1),isNaN(v)?0:v}function addLEDs(e){if(e>1)return maxB=e,void(gId("+").style.display="inline");var n=d.getElementsByClassName("iST"),t=n.length;if(!(1==e&&t>=maxB||-1==e&&0==t)){var a=gId("mLC");if(1==e){var i=`<div class="iST">\n${t>0?'<hr style="width:260px">':""}\n${t+1}:\n<select name="LT${t}" onchange="UI()">\n<option value="22">WS281x</option>\n<option value="30">SK6812 RGBW</option>\n<option value="31">TM1814</option>\n<option value="24">400kHz</option>\n<option value="50">WS2801</option>\n<option value="51">APA102</option>\n<option value="52">LPD8806</option>\n<option value="53">P9813</option>\n<option value="41">PWM White</option>\n<option value="42">PWM WWCW</option>\n<option value="43">PWM RGB</option>\n<option value="44">PWM RGBW</option>\n<option value="45">PWM RGBWC</option>\n</select>&nbsp;\nColor Order:\n<select name="CO${t}">\n<option value="0">GRB</option>\n<option value="1">RGB</option>\n<option value="2">BRG</option>\n<option value="3">RBG</option>\n<option value="4">BGR</option>\n<option value="5">GBR</option>\n</select><br>\n<span id="p0d${t}">Pin:</span> <input type="number" class="xs" name="L0${t}" min="0" max="33" required onchange="UI()"/>\n<span id="p1d${t}">Clock:</span> <input type="number" class="xs" name="L1${t}" min="0" max="33" onchange="UI()"/>\n<span id="p2d${t}"></span><input type="number" class="xs" name="L2${t}" min="0" max="33" onchange="UI()"/>\n<span id="p3d${t}"></span><input type="number" class="xs" name="L3${t}" min="0" max="33" onchange="UI()"/>\n<span id="p4d${t}"></span><input type="number" class="xs" name="L4${t}" min="0" max="33" onchange="UI()"/>\n<br>\n<span id="psd${t}">Start:</span> <input type="number" name="LS${t}" id="ls${t}" min="0" max="8191" value="${lastEnd(t)}" required />&nbsp;\n<div id="dig${t}c" style="display:inline">Count: <input type="number" name="LC${t}" class="l" min="0" max="${maxPB}" value="1" required oninput="UI()" /></div>\n<br>\n<div id="dig${t}r" style="display:inline"><span id="rev${t}">Reverse</span>: <input type="checkbox" name="CV${t}"></div>&nbsp;\n<div id="dig${t}s" style="display:inline">Skip 1<sup>st</sup> LED: <input id="sl${t}" type="checkbox" name="SL${t}"></div>\n</div>`;a.insertAdjacentHTML("beforeend",i)}-1==e&&(n[--t].remove(),--t),gId("+").style.display=t<maxB-1?"inline":"none",gId("-").style.display=t>0?"inline":"none",UI()}}function addBtn(e,n,t){var a=gId("btns").innerHTML,i="BT"+e;a+=`Button ${e} pin: <input type="number" class="xs" min="-1" max="40" name="${i}" onchange="UI()" value="${n}">&nbsp;`,a+=`<select name="${"BE"+e}">`,a+=`<option value="0" ${0==t?"selected":""}>Disabled</option>`,a+=`<option value="2" ${2==t?"selected":""}>Pushbutton</option>`,a+=`<option value="3" ${3==t?"selected":""}>Push inverted</option>`,a+=`<option value="4" ${4==t?"selected":""}>Switch</option>`,a+=`<option value="5" ${5==t?"selected":""}>PIR sensor</option>`,a+=`<option value="6" ${6==t?"selected":""}>Touch</option>`,a+=`<option value="7" ${7==t?"selected":""}>Analog</option>`,a+=`<option value="8" ${8==t?"selected":""}>Analog inverted</option>`,a+="</select>",a+=`<span style="cursor: pointer;" onclick="off('${i}')">&nbsp;&#215;</span><br>`,gId("btns").innerHTML=a}function uploadFile(e){var n=new XMLHttpRequest;n.addEventListener("load",(function(){showToast(this.responseText)})),n.addEventListener("error",(function(e){showToast(e.stack,!0)})),n.open("POST","/upload");var t=new FormData;return t.append("data",d.Sf.data.files[0],e),n.send(t),d.Sf.data.value="",!1}function GetV() {var d=document;
8181
%CSS%%SCSS%</head><body onload="S()"><form
8282
id="form_s" name="Sf" method="post"><div class="helpB"><button type="button"
8383
onclick="H()">?</button></div><button type="button" onclick="B()">Back</button>

0 commit comments

Comments
 (0)