intermediate: building build ui
This commit is contained in:
parent
a2b8c7d8fa
commit
a48d52b30a
|
@ -113,3 +113,12 @@
|
||||||
.configui .selector .title {
|
.configui .selector .title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
.configui .selector.level2 {
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
.configui .selector.level3 {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
.configui .selector.level4 {
|
||||||
|
margin-left: 1.5em;
|
||||||
|
}
|
|
@ -136,10 +136,13 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
let parsed=yamlLoad(config);
|
let parsed=yamlLoad(config);
|
||||||
return parsed;
|
return parsed;
|
||||||
}
|
}
|
||||||
|
const PATH_ATTR='data-path';
|
||||||
const buildSelector=(parent,config,prefix,current,callback)=>{
|
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;
|
let name=prefix+"_"+config.key;
|
||||||
|
let level=name.replace(/[^_]*/g,'');
|
||||||
|
let frame=addEl('div','selector level'+level.length,parent);
|
||||||
|
frame.setAttribute(PATH_ATTR,name);
|
||||||
|
let title=addEl('div','title',frame,config.label);
|
||||||
if (! config.values) return;
|
if (! config.values) return;
|
||||||
config.values.forEach((v)=>{
|
config.values.forEach((v)=>{
|
||||||
let ef=addEl('div','radioFrame',frame);
|
let ef=addEl('div','radioFrame',frame);
|
||||||
|
@ -157,29 +160,53 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
});
|
});
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
let selectors=[];
|
const removeSelectors=(prefix)=>{
|
||||||
|
forEachEl('.selectorFrame',(el)=>{
|
||||||
|
let path=el.getAttribute(PATH_ATTR);
|
||||||
|
if (! path) return;
|
||||||
|
if (path.indexOf(prefix) == 0){
|
||||||
|
el.remove();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let removeKeys=[];
|
||||||
|
for (let k in config){
|
||||||
|
if (k.indexOf(prefix) == 0) removeKeys.push(k);
|
||||||
|
}
|
||||||
|
removeKeys.forEach((k)=>delete config[k]);
|
||||||
|
}
|
||||||
const buildSelectors=(prefix,configList)=>{
|
const buildSelectors=(prefix,configList)=>{
|
||||||
|
removeSelectors(prefix);
|
||||||
if (!configList) return;
|
if (!configList) return;
|
||||||
let parent=document.getElementById("selectors");
|
let parent=document.getElementById("selectors");
|
||||||
if (!parent) return;
|
if (!parent) return;
|
||||||
let frame=addEl('div','selectorFrame',parent);
|
let frame=addEl('div','selectorFrame',parent);
|
||||||
selectors.push(frame);
|
frame.setAttribute(PATH_ATTR,prefix);
|
||||||
let level=selectors.length-1;
|
|
||||||
configList.forEach((cfg)=>{
|
configList.forEach((cfg)=>{
|
||||||
let name=prefix?(prefix+"_"+cfg.key):cfg.key;
|
let name=prefix?(prefix+"_"+cfg.key):cfg.key;
|
||||||
let current=config[name];
|
let current=config[name];
|
||||||
buildSelector(frame,cfg,name,current,(cfg,ev)=>{
|
buildSelector(frame,cfg,prefix,current,(ecfg,ev)=>{
|
||||||
for (let i=level+1;i<selectors.length;i++){
|
buildSelectors(name,ecfg.children);
|
||||||
//TODO: remove already set values?
|
config[name]={cfg:cfg, value:ecfg.value};
|
||||||
selectors[i].remove();
|
buildValues();
|
||||||
}
|
|
||||||
config[name]=ev.target.value;
|
|
||||||
if (cfg.children){
|
|
||||||
buildSelectors(name,cfg.children);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const buildValues=()=>{
|
||||||
|
let environment;
|
||||||
|
let flags="";
|
||||||
|
for (let k in config){
|
||||||
|
let struct=config[k].cfg;
|
||||||
|
if (! struct) continue;
|
||||||
|
if (struct.target === 'environment'){
|
||||||
|
environment=config[k].value;
|
||||||
|
}
|
||||||
|
if (struct.target === 'define'){
|
||||||
|
flags+=" -D"+config[k].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById('environment').value=environment;
|
||||||
|
document.getElementById('buildflags').value=flags;
|
||||||
|
}
|
||||||
window.onload=async ()=>{
|
window.onload=async ()=>{
|
||||||
setButtons(btConfig);
|
setButtons(btConfig);
|
||||||
forEachEl('#environment',(el)=>el.addEventListener('change',hideResults));
|
forEachEl('#environment',(el)=>el.addEventListener('change',hideResults));
|
||||||
|
@ -192,6 +219,7 @@ import {load as yamlLoad} from "https://cdn.skypack.dev/js-yaml@4.1.0";
|
||||||
setRunning(true);
|
setRunning(true);
|
||||||
}
|
}
|
||||||
structure=await loadConfig("testconfig.yaml");
|
structure=await loadConfig("testconfig.yaml");
|
||||||
buildSelectors(undefined,[structure.config.board]);
|
buildSelectors('base',[structure.config.board]);
|
||||||
|
buildValues();
|
||||||
}
|
}
|
||||||
})();
|
})();
|
Loading…
Reference in New Issue