Skip to content

Commit 5c94b67

Browse files
committed
Reduce UI footprint
1 parent 1eb1f5f commit 5c94b67

File tree

2 files changed

+54
-62
lines changed

2 files changed

+54
-62
lines changed

wled00/data/index.css

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,21 +1386,21 @@ dialog {
13861386
}
13871387

13881388
/* list item content */
1389-
.lstIcontent {
1389+
.lstI .content {
13901390
padding: 9px 0 7px;
13911391
position: relative;
13921392
}
13931393

13941394
/* list item name (for sorting) */
1395-
.lstIname {
1395+
.lstI .name, .lstI .fltr {
13961396
white-space: nowrap;
13971397
text-overflow: ellipsis;
13981398
-webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */
13991399
filter: grayscale(100%);
14001400
}
14011401

14021402
/* list item palette preview */
1403-
.lstIprev {
1403+
.lstI .prev {
14041404
width: 100%;
14051405
height: 6px;
14061406
position: absolute;
@@ -1446,7 +1446,7 @@ dialog {
14461446

14471447
/* segment & preset inner/expanded content */
14481448
.segin,
1449-
.presin {
1449+
.presin, .presin.content {
14501450
padding: 8px;
14511451
position: relative;
14521452
}
@@ -1468,7 +1468,7 @@ dialog {
14681468
}
14691469

14701470
/* hidden list items, must be after .expanded */
1471-
.pres .lstIcontent, .segin {
1471+
.pres .content, .segin {
14721472
display: none;
14731473
}
14741474

@@ -1627,7 +1627,7 @@ dialog {
16271627
input[type="number"] {
16281628
width: 32px;
16291629
}
1630-
.lstIcontent {
1630+
.lstI .content {
16311631
padding-left: 8px;
16321632
}
16331633
.revchkl {

wled00/data/index.js

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const ranges = RangeTouch.setup('input[type="range"]', {});
1919
var retry = false;
2020
var palettesData;
2121
var fxdata = [];
22-
var pJson = {}, eJson = {}, lJson = {};
22+
var pJson = {}; // array of presets
2323
var plJson = {}; // array of playlists
2424
var pN = "", pI = 0, pNum = 0;
2525
var pmt = 1, pmtLS = 0, pmtLast = 0;
@@ -527,8 +527,7 @@ function loadPalettes(callback = null)
527527
return res.json();
528528
})
529529
.then((json)=>{
530-
lJson = Object.entries(json);
531-
populatePalettes();
530+
populatePalettes(Object.entries(json));
532531
retry = false;
533532
})
534533
.catch((e)=>{
@@ -554,8 +553,7 @@ function loadFX(callback = null)
554553
return res.json();
555554
})
556555
.then((json)=>{
557-
eJson = Object.entries(json);
558-
populateEffects();
556+
populateEffects(Object.entries(json));
559557
retry = false;
560558
})
561559
.catch((e)=>{
@@ -636,10 +634,10 @@ function populatePresets(fromls)
636634

637635
cn += `<div class="pres lstI" id="p${i}o">`;
638636
if (cfg.comp.pid) cn += `<div class="pid">${i}</div>`;
639-
cn += `<div class="pname lstIname" onclick="setPreset(${i})">${i==lastinfo.leds.bootps?"<i class='icons btn-icon'>&#xe410;</i>":""}${isPlaylist(i)?"<i class='icons btn-icon'>&#xe139;</i>":""}${pName(i)}
637+
cn += `<div class="pname name" onclick="setPreset(${i})">${i==lastinfo.leds.bootps?"<i class='icons btn-icon'>&#xe410;</i>":""}${isPlaylist(i)?"<i class='icons btn-icon'>&#xe139;</i>":""}${pName(i)}
640638
<i class="icons edit-icon flr" id="p${i}nedit" onclick="tglSegn(${i+100})">&#xe2c6;</i></div>
641639
<i class="icons e-icon flr" id="sege${i+100}" onclick="expand(${i+100})">&#xe395;</i>
642-
<div class="presin lstIcontent" id="seg${i+100}"></div>
640+
<div class="presin content" id="seg${i+100}"></div>
643641
</div>`;
644642
pNum++;
645643
}
@@ -938,9 +936,8 @@ function populateSegments(s)
938936
tooltip("#Segments");
939937
}
940938

941-
function populateEffects()
939+
function populateEffects(effects)
942940
{
943-
var effects = eJson;
944941
var html = "";
945942

946943
effects.shift(); // temporary remove solid
@@ -959,33 +956,33 @@ function populateEffects()
959956
for (let ef of effects) {
960957
// add slider and color control to setFX (used by requestjson)
961958
let id = ef.id;
962-
let nm = ef.name+" ";
963-
let fd = "";
959+
let nm = ef.name;
960+
let fd = "", fl = " ";
964961
if (ef.name.indexOf("RSVD") < 0) {
965962
if (Array.isArray(fxdata) && fxdata.length>id) {
966963
if (fxdata[id].length==0) fd = ";;!;1"
967964
else fd = fxdata[id];
968965
let eP = (fd == '')?[]:fd.split(";"); // effect parameters
969966
let p = (eP.length<3 || eP[2]==='')?[]:eP[2].split(","); // palette data
970-
if (p.length>0 && (p[0] !== "" && !isNumeric(p[0]))) nm += "&#x1F3A8;"; // effects using palette
967+
if (p.length>0 && (p[0] !== "" && !isNumeric(p[0]))) fl += "&#x1F3A8;"; // effects using palette
971968
let m = (eP.length<4 || eP[3]==='')?'1':eP[3]; // flags
972969
if (id == 0) m = ''; // solid has no flags
973970
if (m.length>0) {
974-
if (m.includes('0')) nm += "&#8226;"; // 0D effects (PWM & On/Off)
975-
if (m.includes('1')) nm += "&#8942;"; // 1D effects
976-
if (m.includes('2')) nm += "&#9638;"; // 2D effects
977-
if (m.includes('v')) nm += "&#9834;"; // volume effects
978-
if (m.includes('f')) nm += "&#9835;"; // frequency effects
971+
if (m.includes('0')) fl += "&#8226;"; // 0D effects (PWM & On/Off)
972+
if (m.includes('1')) fl += "&#8942;"; // 1D effects
973+
if (m.includes('2')) fl += "&#9638;"; // 2D effects
974+
if (m.includes('v')) fl += "&#9834;"; // volume effects
975+
if (m.includes('f')) fl += "&#9835;"; // frequency effects
979976
}
980977
}
981-
html += generateListItemHtml('fx',id,nm,'setFX','',fd);
978+
html += generateListItemHtml('fx',id,`${nm}</span><span class="fltr">${fl}`,'setFX','',fd);
982979
}
983980
}
984981

985982
gId('fxlist').innerHTML=html;
986983
}
987984

988-
function populatePalettes()
985+
function populatePalettes(lJson)
989986
{
990987
lJson.shift(); // temporary remove default
991988
lJson.sort((a,b) => (a[1]).localeCompare(b[1]));
@@ -998,7 +995,7 @@ function populatePalettes()
998995
pa[0],
999996
pa[1],
1000997
'setPalette',
1001-
`<div class="lstIprev" style="${genPalPrevCss(pa[0])}"></div>`
998+
`<div class="prev" style="${genPalPrevCss(pa[0])}"></div>`
1002999
);
10031000
}
10041001
gId('pallist').innerHTML=html;
@@ -1013,7 +1010,7 @@ function populatePalettes()
10131010
255-j,
10141011
'~ Custom '+j+' ~',
10151012
'setPalette',
1016-
`<div class="lstIprev" style="${genPalPrevCss(255-j)}"></div>`
1013+
`<div class="prev" style="${genPalPrevCss(255-j)}"></div>`
10171014
);
10181015
}
10191016
}
@@ -1024,7 +1021,7 @@ function populatePalettes()
10241021
function redrawPalPrev()
10251022
{
10261023
d.querySelectorAll('#pallist .lstI').forEach((pal,i) =>{
1027-
let lP = pal.querySelector('.lstIprev');
1024+
let lP = pal.querySelector('.prev');
10281025
if (lP) {
10291026
lP.style = genPalPrevCss(pal.dataset.id);
10301027
}
@@ -1082,8 +1079,8 @@ function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', e
10821079
`<label title="(${id})" class="radio schkl" onclick="event.preventDefault()">`+ // (#1984)
10831080
`<input type="radio" value="${id}" name="${listName}">`+
10841081
`<span class="radiomark"></span>`+
1085-
`<div class="lstIcontent">`+
1086-
`<span class="lstIname">${name}</span>`+
1082+
`<div class="content">`+
1083+
`<span class="name">${name}</span>`+
10871084
`</div>`+
10881085
`</label>`+
10891086
extraHtml +
@@ -1215,9 +1212,9 @@ function updateLen(s)
12151212
if (stop-start>1 && stopY-startY>1) {
12161213
// 2D segment
12171214
if (tPL) tPL.classList.remove('hide'); // unhide transpose checkbox
1218-
let sE = d.querySelector(`#fxlist .lstI[data-id="${selectedFx}"]`);
1215+
let sE = d.querySelector(`#fxlist div[data-id="${selectedFx}"]`);
12191216
if (sE) {
1220-
let sN = sE.querySelector(".lstIname").innerText;
1217+
let sN = sE.querySelector(".name").innerText;
12211218
let seg = gId(`seg${s}map2D`);
12221219
if (seg) {
12231220
if (sN.indexOf("\u25A6")<0) seg.classList.remove('hide'); // unhide mapping for 1D effects (| in name)
@@ -1328,11 +1325,11 @@ function updateSelectedPalette(s)
13281325
var selElement = parent.querySelector('.selected');
13291326
if (selElement) selElement.classList.remove('selected');
13301327

1331-
var selectedPalette = parent.querySelector(`.lstI[data-id="${s}"]`);
1332-
if (selectedPalette) parent.querySelector(`.lstI[data-id="${s}"]`).classList.add('selected');
1328+
var selectedPalette = parent.querySelector(`div[data-id="${s}"]`);
1329+
if (selectedPalette) parent.querySelector(`div[data-id="${s}"]`).classList.add('selected');
13331330

13341331
// Display selected palette name on button in simplified UI
1335-
let selectedName = selectedPalette.querySelector(".lstIname").innerText;
1332+
let selectedName = selectedPalette.querySelector(".name").innerText;
13361333
if (simplifiedUI) {
13371334
gId("palwbtn").innerText = "Palette: " + selectedName;
13381335
}
@@ -1360,7 +1357,7 @@ function updateSelectedFx()
13601357
selElement.style.bottom = null; // remove element style added in slider handling
13611358
}
13621359

1363-
var selectedEffect = parent.querySelector(`.lstI[data-id="${selectedFx}"]`);
1360+
var selectedEffect = parent.querySelector(`div[data-id="${selectedFx}"]`);
13641361
if (selectedEffect) {
13651362
selectedEffect.classList.add('selected');
13661363
setEffectParameters(selectedFx);
@@ -1378,7 +1375,7 @@ function updateSelectedFx()
13781375
}
13791376
}
13801377
});
1381-
var selectedName = selectedEffect.querySelector(".lstIname").innerText;
1378+
var selectedName = selectedEffect.querySelector(".name").innerText;
13821379

13831380
// Display selected effect name on button in simplified UI
13841381
let selectedNameOnlyAscii = selectedName.replace(/[^\x00-\x7F]/g, "");
@@ -1388,7 +1385,7 @@ function updateSelectedFx()
13881385

13891386
// hide 2D mapping and/or sound simulation options
13901387
d.querySelectorAll(`#segcont div[data-map="map2D"]`).forEach((seg)=>{
1391-
let not2Dfx = d.querySelector(`#fxlist div[data-id="${seg.dataset.fx}"] .lstIname`).innerText.indexOf("\u25A6") < 0;
1388+
let not2Dfx = d.querySelector(`#fxlist div[data-id="${seg.dataset.fx}"] .name`).innerText.indexOf("\u25A6") < 0;
13921389
if (not2Dfx) seg.classList.remove('hide');
13931390
else seg.classList.add('hide');
13941391
});
@@ -1752,7 +1749,7 @@ function requestJson(command=null)
17521749
if (json.info) {
17531750
let i = json.info;
17541751
parseInfo(i);
1755-
populatePalettes(i);
1752+
//populatePalettes();
17561753
if (isInfo) populateInfo(i);
17571754
if (simplifiedUI) simplifyUI();
17581755
}
@@ -2062,17 +2059,17 @@ ${makePlSel(i, plJson[i].end?plJson[i].end:0)}
20622059
} else {
20632060
content =
20642061
`<label class="check revchkl">
2065-
<span class="lstIname">Include brightness</span>
2062+
<span class="name">Include brightness</span>
20662063
<input type="checkbox" id="p${i}ibtgl" checked>
20672064
<span class="checkmark"></span>
20682065
</label>
20692066
<label class="check revchkl">
2070-
<span class="lstIname">Save segment bounds</span>
2067+
<span class="name">Save segment bounds</span>
20712068
<input type="checkbox" id="p${i}sbtgl" checked>
20722069
<span class="checkmark"></span>
20732070
</label>
20742071
<label class="check revchkl">
2075-
<span class="lstIname">Checked segments only</span>
2072+
<span class="name">Checked segments only</span>
20762073
<input type="checkbox" id="p${i}sbchk">
20772074
<span class="checkmark"></span>
20782075
</label>`;
@@ -2088,15 +2085,15 @@ ${makePlSel(i, plJson[i].end?plJson[i].end:0)}
20882085
<div class="h">(leave empty for no Quick load button)</div>
20892086
<div ${pl&&i==0?"style='display:none'":""}>
20902087
<label class="check revchkl">
2091-
<span class="lstIname">${pl?"Show playlist editor":(i>0)?"Overwrite with state":"Use current state"}</span>
2088+
<span class="name">${pl?"Show playlist editor":(i>0)?"Overwrite with state":"Use current state"}</span>
20922089
<input type="checkbox" id="p${i}cstgl" onchange="tglCs(${i})" ${(i==0||pl)?"checked":""}>
20932090
<span class="checkmark"></span>
20942091
</label>
20952092
</div>
20962093
<div class="po2" id="p${i}o2">API command<br><textarea class="apitxt" id="p${i}api"></textarea></div>
20972094
<div class="po1" id="p${i}o1">${content}</div>
20982095
<label class="check revchkl">
2099-
<span class="lstIname">Apply at boot</span>
2096+
<span class="name">Apply at boot</span>
21002097
<input type="checkbox" id="p${i}bps" ${i==bps?"checked":""}>
21012098
<span class="checkmark"></span>
21022099
</label>
@@ -2117,7 +2114,7 @@ function makePUtil()
21172114
p.innerHTML = `<div class="presin expanded">${makeP(0)}</div>`;
21182115
let pTx = gId('p0txt');
21192116
pTx.focus();
2120-
pTx.value = eJson.find((o)=>{return o.id==selectedFx}).name;
2117+
pTx.value = d.querySelector(`#fxlist div[data-id="${selectedFx}"] .name`).innerText;
21212118
pTx.select();
21222119
p.scrollIntoView({
21232120
behavior: 'smooth',
@@ -2869,7 +2866,7 @@ function getPalettesData(page, callback)
28692866
function hideModes(txt)
28702867
{
28712868
for (let e of (d.querySelectorAll('#fxlist .lstI')||[])) {
2872-
let iT = e.querySelector('.lstIname').innerText;
2869+
let iT = e.querySelector('.name').innerText;
28732870
let f = false;
28742871
if (txt==="2D") f = iT.indexOf("\u25A6") >= 0 && iT.indexOf("\u22EE") < 0; // 2D && !1D
28752872
else f = iT.indexOf(txt) >= 0;
@@ -2883,17 +2880,6 @@ function search(field, listId = null) {
28832880

28842881
const search = field.value !== '';
28852882

2886-
// restore default preset sorting if no search term is entered
2887-
if (!search) {
2888-
if (listId === 'pcont') { populatePresets(); return; }
2889-
if (listId === 'pallist') {
2890-
let id = parseInt(d.querySelector('#pallist input[name="palette"]:checked').value); // preserve selected palette
2891-
populatePalettes();
2892-
updateSelectedPalette(id);
2893-
return;
2894-
}
2895-
}
2896-
28972883
// clear filter if searching in fxlist
28982884
if (listId === 'fxlist' && search) {
28992885
d.querySelectorAll("#filters input[type=checkbox]").forEach((e) => { e.checked = false; });
@@ -2906,14 +2892,18 @@ function search(field, listId = null) {
29062892
const listItems = gId(listId).querySelectorAll('.lstI');
29072893
listItems.forEach((listItem, i) => {
29082894
if (listId !== 'pcont' && i === 0) return;
2909-
const listItemName = listItem.querySelector('.lstIname').innerText.toUpperCase();
2895+
const listItemName = listItem.querySelector('.name').innerText.toUpperCase();
29102896
const searchIndex = listItemName.indexOf(field.value.toUpperCase());
29112897
if (searchIndex < 0) {
29122898
listItem.dataset.searchIndex = Number.MAX_SAFE_INTEGER;
29132899
} else {
29142900
listItem.dataset.searchIndex = searchIndex;
29152901
}
2916-
listItem.style.display = (searchIndex < 0) && !listItem.classList.contains("selected") ? 'none' : '';
2902+
if ((searchIndex < 0) && !listItem.classList.contains("selected")) {
2903+
listItem.classList.add('hide');
2904+
} else {
2905+
listItem.classList.remove('hide');
2906+
}
29172907
});
29182908

29192909
// sort list items by search index and name
@@ -2925,8 +2915,8 @@ function search(field, listId = null) {
29252915
return aSearchIndex - bSearchIndex;
29262916
}
29272917

2928-
const aName = a.querySelector('.lstIname').innerText.toUpperCase();
2929-
const bName = b.querySelector('.lstIname').innerText.toUpperCase();
2918+
const aName = a.querySelector('.name').innerText.toUpperCase();
2919+
const bName = b.querySelector('.name').innerText.toUpperCase();
29302920

29312921
return aName.localeCompare(bName);
29322922
});
@@ -2961,6 +2951,7 @@ function filterFocus(e) {
29612951
// compute sticky top (with delay for transition)
29622952
if (!h) setTimeout(() => {
29632953
sCol('--sti', (sti+f.offsetHeight) + "px"); // has an unpleasant consequence on palette offset
2954+
//console.log(sti + " -> " + (sti+f.offsetHeight));
29642955
}, 255);
29652956
f.classList.remove('fade'); // immediately show (still has transition)
29662957
}
@@ -2971,6 +2962,7 @@ function filterFocus(e) {
29712962
if (!c) {
29722963
// compute sticky top
29732964
sCol('--sti', (sti-h) + "px"); // has an unpleasant consequence on palette offset
2965+
//console.log(sti + " -> " + (sti-h));
29742966
f.classList.add('fade');
29752967
}
29762968
}, 255); // wait with hiding
@@ -2983,7 +2975,7 @@ function filterFx() {
29832975
inputField.focus();
29842976
clean(inputField.nextElementSibling);
29852977
d.querySelectorAll('#fxlist .lstI').forEach((listItem, i) => {
2986-
const listItemName = listItem.querySelector('.lstIname').innerText;
2978+
const listItemName = listItem.querySelector('.fltr').innerText;
29872979
let hide = false;
29882980
d.querySelectorAll("#filters input[type=checkbox]").forEach((e) => { if (e.checked && !listItemName.includes(e.dataset.flt)) hide = i > 0 /*true*/; });
29892981
listItem.style.display = hide && !listItem.classList.contains("selected") ? 'none' : '';

0 commit comments

Comments
 (0)