2020-05-17 20:09:39 +02:00
<!DOCTYPE html>
2021-12-08 14:38:21 +01:00
< html lang = "en" >
< head >
2023-10-04 21:37:10 +02:00
< meta content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name = "viewport" >
2023-01-16 22:12:02 +01:00
< meta charset = "utf-8" >
< title > DMX Settings< / title >
< script >
var d=document;
2023-06-04 18:40:29 +02:00
var loc = false, locip, locproto = "http:";
2023-01-16 22:12:02 +01:00
function H(){window.open("https://github.com/Aircoookie/WLED/wiki/DMX");}
2023-06-04 18:40:29 +02:00
function B(){window.open(getURL("/settings"),"_self");}
2023-01-16 22:12:02 +01:00
function GCH(num) {
d.getElementById('dmxchannels').innerHTML += "";
for (i=0;i< num ; i + + ) {
d.getElementById('dmxchannels').innerHTML += "< span id = CH" + ( i + 1 ) + " s > Channel " + (i+1) + ": < select name = CH" + ( i + 1 ) + " id = \"CH" + ( i + 1 ) + " \ " > < option value = 0 > Set to 0< / option > < option value = 1 > Red< / option > < option value = 2 > Green< / option > < option value = 3 > Blue< / option > < option value = 4 > White< / option > < option value = 5 > Shutter (Brightness)< / option > < option value = 6 > Set to 255< / option > < / select > < / span > < br / > \n";
}
}
function mMap(){
numCh=document.Sf.CN.value;
numGap=document.Sf.CG.value;
if (parseInt(numCh)>parseInt(numGap)) {
d.getElementById("gapwarning").style.display="block";
} else {
d.getElementById("gapwarning").style.display="none";
}
for (i=0;i< 15 ; i + + ) {
if (i>=numCh) {
d.getElementById("CH"+(i+1) + "s").style.opacity = "0.5";
d.getElementById("CH"+(i+1)).disabled = true;
} else {
d.getElementById("CH"+(i+1) + "s").style.opacity = "1";
d.getElementById("CH"+(i+1)).disabled = false;
}
}
}
// https://www.educative.io/edpresso/how-to-dynamically-load-a-js-file-in-javascript
function loadJS(FILE_URL, async = true) {
let scE = d.createElement("script");
scE.setAttribute("src", FILE_URL);
scE.setAttribute("type", "text/javascript");
scE.setAttribute("async", async);
d.body.appendChild(scE);
// success event
scE.addEventListener("load", () => {
//console.log("File loaded");
GCH(15);GetV();mMap();
});
// error event
scE.addEventListener("error", (ev) => {
console.log("Error on loading file", ev);
alert("Loading of configuration script failed.\nIncomplete page data!");
});
}
function S(){
2023-06-07 21:37:54 +02:00
let l = window.location;
if (l.protocol == "file:") {
2023-01-16 22:12:02 +01:00
loc = true;
locip = localStorage.getItem('locIp');
if (!locip) {
locip = prompt("File Mode. Please enter WLED IP!");
localStorage.setItem('locIp', locip);
}
2023-06-04 18:40:29 +02:00
} else {
// detect reverse proxy
2023-06-07 21:37:54 +02:00
let path = l.pathname;
2023-06-04 18:40:29 +02:00
let paths = path.slice(1,path.endsWith('/')?-1:undefined).split("/");
if (paths.length > 2) {
2023-11-08 18:40:52 +01:00
paths.pop(); // remove "dmx"
paths.pop(); // remove "settings"
2023-06-07 21:37:54 +02:00
locproto = l.protocol;
2023-06-04 18:40:29 +02:00
loc = true;
2023-11-08 18:40:52 +01:00
locip = l.hostname + (l.port ? ":" + l.port : "") + "/" + paths.join('/');
2023-06-04 18:40:29 +02:00
}
2023-01-16 22:12:02 +01:00
}
2023-06-04 18:40:29 +02:00
loadJS(getURL('/settings/s.js?p=7'), false); // If we set async false, file is loaded and executed, then next statement is processed
if (loc) d.Sf.action = getURL('/settings/dmx');
}
function getURL(path) {
return (loc ? locproto + "//" + locip : "") + path;
2023-01-16 22:12:02 +01:00
}
< / script >
< style > @ import url ( "style.css" ) ; < / style >
2020-05-17 20:09:39 +02:00
< / head >
< body onload = "S()" >
< form id = "form_s" name = "Sf" method = "post" >
2021-03-05 09:50:59 +01:00
< div class = "toprow" >
2020-05-17 20:09:39 +02:00
< div class = "helpB" > < button type = "button" onclick = "H()" > ?< / button > < / div >
< button type = "button" onclick = "B()" > Back< / button > < button type = "submit" > Save< / button > < hr >
2021-03-05 09:50:59 +01:00
< / div >
2020-05-17 20:09:39 +02:00
< h2 > Imma firin ma lazer (if it has DMX support)< / h2 > <!-- TODO: Change to something less - meme - related // -->
Proxy Universe < input name = PU type = number min = 0 max = 63999 required > from E1.31 to DMX (0=disabled)< br >
< i > This will disable the LED data output to DMX configurable below< / i > < br > < br >
< i > Number of fixtures is taken from LED config page< / i > < br >
Channels per fixture (15 max): < input type = "number" min = "1" max = "15" name = "CN" maxlength = "2" onchange = "mMap();" > < br / >
Start channel: < input type = "number" min = "1" max = "512" name = "CS" maxlength = "2" > < br / >
Spacing between start channels: < input type = "number" min = "1" max = "512" name = "CG" maxlength = "2" onchange = "mMap();" > [ < a href = "javascript:alert('if set to 10, first fixture will start at 10,\nsecond will start at 20 etc.\nRegardless of the channel count.\nMakes memorizing channel numbers easier.');" > info< / a > ]< br >
< div id = "gapwarning" style = "color: orange; display: none;" > WARNING: Channel gap is lower than channels per fixture.< br / > This will cause overlap.< / div >
< button type = "button" onclick = "location.href='/dmxmap';" > DMX Map< / button > < br >
DMX fixtures start LED: < input type = "number" min = "0" max = "1500" name = "SL" >
2020-08-03 18:37:25 +02:00
< h3 > Channel functions< / h3 >
2020-05-17 20:09:39 +02:00
< div id = "dmxchannels" > < / div >
< hr > < button type = "button" onclick = "B()" > Back< / button > < button type = "submit" > Save< / button >
< / form >
< / body >
2020-08-03 18:37:25 +02:00
< / html >