intermediate: building build ui
This commit is contained in:
parent
1882afc09a
commit
a2b8c7d8fa
|
@ -94,3 +94,22 @@
|
||||||
.configui #warn.warn{
|
.configui #warn.warn{
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
.configui .radioFrame {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
.configui input.radioCi {
|
||||||
|
appearance: auto;
|
||||||
|
float: none;
|
||||||
|
opacity: 1;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
margin-right: 0.5em;
|
||||||
|
z-index: unset;
|
||||||
|
}
|
||||||
|
.configui .selector {
|
||||||
|
padding-bottom: 0.5em;
|
||||||
|
border-bottom: 1px solid grey;
|
||||||
|
}
|
||||||
|
.configui .selector .title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
|
@ -10,6 +10,9 @@
|
||||||
<div class="configui container">
|
<div class="configui container">
|
||||||
<h1>Build your own ESP32-NMEA2000</h1>
|
<h1>Build your own ESP32-NMEA2000</h1>
|
||||||
<h3>New Build</h3>
|
<h3>New Build</h3>
|
||||||
|
<div id="selectors">
|
||||||
|
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<span class="label">Board type</span>
|
<span class="label">Board type</span>
|
||||||
<select id="environment" value="m5stack-atom-generic">
|
<select id="environment" value="m5stack-atom-generic">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { setButtons,fillValues, setValue, buildUrl, fetchJson, setVisible, enableEl, setValues, getParam, fillSelect, forEachEl } from "./helper.js";
|
import { addEl, setButtons,fillValues, setValue, buildUrl, fetchJson, setVisible, enableEl, setValues, getParam, fillSelect, forEachEl } from "./helper.js";
|
||||||
import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
(function(){
|
(function(){
|
||||||
const STATUS_INTERVAL=2000;
|
const STATUS_INTERVAL=2000;
|
||||||
|
@ -7,6 +7,8 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
let currentPipeline=undefined;
|
let currentPipeline=undefined;
|
||||||
let downloadUrl=undefined;
|
let downloadUrl=undefined;
|
||||||
let timer=undefined;
|
let timer=undefined;
|
||||||
|
let structure=undefined;
|
||||||
|
let config={};
|
||||||
let branch=getParam('branch');
|
let branch=getParam('branch');
|
||||||
if (! branch) branch='master';
|
if (! branch) branch='master';
|
||||||
const showError=(text)=>{
|
const showError=(text)=>{
|
||||||
|
@ -132,6 +134,51 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
const loadConfig=async (url)=>{
|
const loadConfig=async (url)=>{
|
||||||
let config=await fetch(url).then((r)=>r.text());
|
let config=await fetch(url).then((r)=>r.text());
|
||||||
let parsed=yamlLoad(config);
|
let parsed=yamlLoad(config);
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
const buildSelector=(parent,config,prefix,current,callback)=>{
|
||||||
|
let frame=addEl('div','selector',parent);
|
||||||
|
let title=addEl('div','title',frame,config.label);
|
||||||
|
let name=prefix+"_"+config.key;
|
||||||
|
if (! config.values) return;
|
||||||
|
config.values.forEach((v)=>{
|
||||||
|
let ef=addEl('div','radioFrame',frame);
|
||||||
|
addEl('div','label',ef,v.label);
|
||||||
|
let re=addEl('input','radioCi',ef);
|
||||||
|
re.setAttribute('type','radio');
|
||||||
|
re.setAttribute('name',name);
|
||||||
|
re.setAttribute('value',v.value);
|
||||||
|
re.addEventListener('change',(ev)=>callback(v,ev));
|
||||||
|
if (v.description && v.url){
|
||||||
|
let lnk=addEl('a','radioDescription',ef,v.description);
|
||||||
|
lnk.setAttribute('href',v.url);
|
||||||
|
lnk.setAttribute('target','_');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
let selectors=[];
|
||||||
|
const buildSelectors=(prefix,configList)=>{
|
||||||
|
if (!configList) return;
|
||||||
|
let parent=document.getElementById("selectors");
|
||||||
|
if (!parent) return;
|
||||||
|
let frame=addEl('div','selectorFrame',parent);
|
||||||
|
selectors.push(frame);
|
||||||
|
let level=selectors.length-1;
|
||||||
|
configList.forEach((cfg)=>{
|
||||||
|
let name=prefix?(prefix+"_"+cfg.key):cfg.key;
|
||||||
|
let current=config[name];
|
||||||
|
buildSelector(frame,cfg,name,current,(cfg,ev)=>{
|
||||||
|
for (let i=level+1;i<selectors.length;i++){
|
||||||
|
//TODO: remove already set values?
|
||||||
|
selectors[i].remove();
|
||||||
|
}
|
||||||
|
config[name]=ev.target.value;
|
||||||
|
if (cfg.children){
|
||||||
|
buildSelectors(name,cfg.children);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
window.onload=async ()=>{
|
window.onload=async ()=>{
|
||||||
setButtons(btConfig);
|
setButtons(btConfig);
|
||||||
|
@ -144,6 +191,7 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
fetchStatus(true);
|
fetchStatus(true);
|
||||||
setRunning(true);
|
setRunning(true);
|
||||||
}
|
}
|
||||||
await loadConfig("testconfig.yaml");
|
structure=await loadConfig("testconfig.yaml");
|
||||||
|
buildSelectors(undefined,[structure.config.board]);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
|
@ -3,6 +3,7 @@ types:
|
||||||
type: select
|
type: select
|
||||||
target: define
|
target: define
|
||||||
label: 'M5 Atom light Base'
|
label: 'M5 Atom light Base'
|
||||||
|
key: m5lightbase
|
||||||
values:
|
values:
|
||||||
- label: "CAN KIT"
|
- label: "CAN KIT"
|
||||||
value: M5_CAN_KIT
|
value: M5_CAN_KIT
|
||||||
|
@ -13,11 +14,33 @@ types:
|
||||||
label: "Atomic RS232 Base"
|
label: "Atomic RS232 Base"
|
||||||
url: "http://docs.m5stack.com/en/atom/Atomic%20RS232%20Base"
|
url: "http://docs.m5stack.com/en/atom/Atomic%20RS232%20Base"
|
||||||
- value: M5_SERIAL_KIT_485
|
- value: M5_SERIAL_KIT_485
|
||||||
description: "M5 Stack RS484 Base"
|
description: "M5 Stack RS485 Base"
|
||||||
label: "Atomic RS485 Base"
|
label: "Atomic RS485 Base"
|
||||||
url: "http://docs.m5stack.com/en/atom/Atomic%20RS485%20Base"
|
url: "http://docs.m5stack.com/en/atom/Atomic%20RS485%20Base"
|
||||||
|
- &m5groovei2c
|
||||||
|
type: multi
|
||||||
|
key: m5groovei2c
|
||||||
|
label: "M5 I2C groove units"
|
||||||
|
values:
|
||||||
|
|
||||||
|
- &m5grooveserial
|
||||||
|
type: select
|
||||||
|
label: "M5 Serial Unit"
|
||||||
|
target: define
|
||||||
|
key: m5grooveserial
|
||||||
|
values:
|
||||||
|
- label: "RS485"
|
||||||
|
value: SERIAL_GROOVE_485
|
||||||
|
description: "M5 RS485 unit"
|
||||||
|
url: "http://docs.m5stack.com/en/unit/rs485"
|
||||||
|
- label: "Tail485"
|
||||||
|
value: SERIAL_GROOVE_485
|
||||||
|
description: "M5 Tail 485"
|
||||||
|
url: "http://docs.m5stack.com/en/atom/tail485"
|
||||||
|
|
||||||
- &m5groove
|
- &m5groove
|
||||||
type: select
|
type: select
|
||||||
|
key: m5groove
|
||||||
label: 'M5 groove type'
|
label: 'M5 groove type'
|
||||||
values:
|
values:
|
||||||
- label: 'CAN'
|
- label: 'CAN'
|
||||||
|
@ -29,30 +52,13 @@ types:
|
||||||
children:
|
children:
|
||||||
- *m5grooveserial
|
- *m5grooveserial
|
||||||
|
|
||||||
- &m5groovei2c
|
|
||||||
type: multi
|
|
||||||
label: "M5 I2C groove units"
|
|
||||||
values:
|
|
||||||
|
|
||||||
- &m5grooveserial
|
|
||||||
type: select
|
|
||||||
label: "M5 Serial Unit"
|
|
||||||
target: define
|
|
||||||
values:
|
|
||||||
- label: "RS485"
|
|
||||||
value: SERIAL_GROOVE_485
|
|
||||||
description: "M5 RS485 unit"
|
|
||||||
url: "http://docs.m5stack.com/en/unit/rs485"
|
|
||||||
- label: "Tail485"
|
|
||||||
value: SERIAL_GROOVE_485
|
|
||||||
description: "M5 Tail 485"
|
|
||||||
url: "http://docs.m5stack.com/en/atom/tail485"
|
|
||||||
|
|
||||||
config:
|
config:
|
||||||
board:
|
board:
|
||||||
type: select
|
type: select
|
||||||
target: environment
|
target: environment
|
||||||
label: 'Board'
|
label: 'Board'
|
||||||
|
key: board
|
||||||
values:
|
values:
|
||||||
- value: m5stack-atom-generic
|
- value: m5stack-atom-generic
|
||||||
label: m5stack-atom
|
label: m5stack-atom
|
||||||
|
|
Loading…
Reference in New Issue