Skip to content

Commit 912f762

Browse files
committed
Bugfix in sort
1 parent 973a9f9 commit 912f762

1 file changed

Lines changed: 46 additions & 37 deletions

File tree

wled00/data/settings_time.htm

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
var ms=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
1111
var timerCount = 0;
1212
var maxTimers = 64;
13-
var presets = {};
14-
var sortedPresetOptions = '';
13+
var presets = [];
14+
var sPO = '';
1515
const TIMER_SUNRISE = 255;
1616
const TIMER_SUNSET = 254;
1717
const TIMER_WEEKDAYS_ALL = 255;
@@ -26,42 +26,56 @@
2626
if (loc) d.Sf.action = getURL('/settings/time');
2727
}
2828
function populatePresets(fromls) {
29-
let json = null;
3029
if (fromls) {
3130
try {
32-
json = JSON.parse(localStorage.getItem("wledP"));
33-
} catch (e) {}
34-
}
35-
if (!json) {
36-
fetch(getURL(`/presets.json`), {
37-
method: 'get'
38-
})
39-
.then(res => {
40-
if (!res.ok) showToast("Error loading presets.", true);
41-
return res.json();
42-
})
43-
.then(json => {
31+
let json = JSON.parse(localStorage.getItem("wledP"));
4432
onPresetsLoaded(json);
45-
})
46-
.catch((error)=>{
47-
showToast("Loading presets failed.", true);
48-
});
33+
return;
34+
} catch (e) {}
4935
}
36+
fetch(getURL(`/presets.json`), {
37+
method: 'get'
38+
})
39+
.then(res => {
40+
if (!res.ok) showToast("Error loading presets.", true);
41+
return res.json();
42+
})
43+
.then(json => {
44+
onPresetsLoaded(json);
45+
})
46+
.catch((error)=>{
47+
showToast("Loading presets failed.", true);
48+
});
5049
}
5150
function onPresetsLoaded(json) {
52-
presets = json;
53-
delete presets["0"];
54-
bSPO();
51+
let sortByName = true;
52+
presets = Object.entries(json);
53+
presets.shift();
54+
try {
55+
let cfg = JSON.parse(localStorage.getItem('wledUiCfg'));
56+
sortByName = !cfg.comp.idsort;
57+
} catch (e) {}
58+
if (sortByName) {
59+
presets.sort((a,b)=>{
60+
let nameA = (a[1].n || ("Preset " + a[0])).toLowerCase();
61+
let nameB = (b[1].n || ("Preset " + b[0])).toLowerCase();
62+
return nameA.localeCompare(nameB);
63+
});
64+
} else {
65+
presets.sort((a,b)=> parseInt(a[0]) - parseInt(b[0]));
66+
}
67+
bSPO(sortByName);
5568
pMP();
5669
rTOPO();
5770
rBPO();
5871
}
59-
function bSPO() { // buildSortedPresetOptions
60-
sortedPresetOptions = '';
61-
for (var p of Object.entries(presets)) {
72+
function bSPO(sortByName = false) { // build sPO
73+
sPO = '';
74+
for (var p of presets) {
6275
var id = p[0];
6376
var name = p[1].n || ("Preset " + id);
64-
sortedPresetOptions += `<option value="${id}">${id}: ${name}</option>`;
77+
let txt = sortByName ? `${name} : ${id}` : `${id} : ${name}`;
78+
sPO += `<option value="${id}">${txt}</option>`;
6579
}
6680
}
6781
function sPSV(sel, value, attrName) { // setPresetSelectValue
@@ -113,7 +127,7 @@
113127
var dow = weekdays >> 1;
114128
var container = gId("TMT").querySelector("table");
115129
var hourVal = isSpecial ? 0 : hour;
116-
var presetOpts = '<option value="0">Delete Timer</option>' + sortedPresetOptions;
130+
var presetOpts = '<option value="0">Delete Timer</option>' + sPO;
117131

118132
var weekdayTable = '<table class="tw"><tr><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th></tr><tr>';
119133
for (j=1;j<8;j++) weekdayTable += `<td><input id="W${i}${j}" type="checkbox" ${(dow>>(j-1))&1?'checked':''}></td>`;
@@ -183,7 +197,7 @@
183197
}
184198
}
185199
function pMP() { // populateMacroPresets
186-
var presetOpts = '<option value="0">Default Action (0)</option>' + sortedPresetOptions;
200+
var presetOpts = '<option value="0">Default Action (0)</option>' + sPO;
187201
var fields = ['A0','A1','MC','MN'];
188202
for (var f of fields) {
189203
var inp = gN(f);
@@ -205,7 +219,7 @@
205219
}
206220
}
207221
function rTOPO() { // refreshTimerPresetOptions
208-
var presetOpts = '<option value="0">Delete Timer</option>' + sortedPresetOptions;
222+
var presetOpts = '<option value="0">Delete Timer</option>' + sPO;
209223
for (var i=0; i<timerCount; i++) {
210224
var sel = gId("T"+i);
211225
if (!sel) continue;
@@ -234,7 +248,7 @@
234248
}
235249
}
236250
function rBPO() { // refreshButtonPresetOptions
237-
var presetOpts = '<option value="0">Default Action (0)</option>' + sortedPresetOptions;
251+
var presetOpts = '<option value="0">Default Action (0)</option>' + sPO;
238252
var analogOpts = bAO();
239253
var container = gId("macros");
240254
if (!container) return;
@@ -276,7 +290,7 @@
276290
function addBRow(i,p,l,d,t) {
277291
if (t===undefined) t = 0;
278292
var b = chrID(i);
279-
var presetOpts = '<option value="0">Default Action (0)</option>' + sortedPresetOptions;
293+
var presetOpts = '<option value="0">Default Action (0)</option>' + sPO;
280294
var typeName = btnTypeName(t);
281295
var buttonBlock = document.createElement('div');
282296
buttonBlock.className = 'bb';
@@ -395,12 +409,7 @@ <h3>Clock</h3>
395409
Countdown Goal:<br>
396410
Date:&nbsp;<nowrap>20<input name="CY" class="xs" type="number" min="0" max="99" required>-<input name="CI" class="xs" type="number" min="1" max="12" required>-<input name="CD" class="xs" type="number" min="1" max="31" required></nowrap><br>
397411
Time:&nbsp;<nowrap><input name="CH" class="xs" type="number" min="0" max="23" required>:<input name="CM" class="xs" type="number" min="0" max="59" required>:<input name="CS" class="xs" type="number" min="0" max="59" required></nowrap><br>
398-
<h3>Macro presets</h3>
399-
Sort Dropdowns: <input type="radio" id="sortById" name="sortOrder" onchange="updateSort(false)" checked><label for="sortById">by ID</label> <input type="radio" id="sortByName" name="sortOrder" onchange="updateSort(true)"><label for="sortByName">by name</label><br>
400-
<b>Macros have moved!</b><br>
401-
<i>Presets now also can be used as macros to save both JSON and HTTP API commands.<br>
402-
Just enter the preset ID below!</i>
403-
<i>Use 0 for the default action instead of a preset</i><br>
412+
<h3>Presets</h3>
404413
Alexa On/Off Preset: <input name="A0" class="m" type="number" min="0" max="250" required> <input name="A1" class="m" type="number" min="0" max="250" required><br>
405414
Countdown-Over Preset: <input name="MC" class="m" type="number" min="0" max="250" required><br>
406415
Timed-Light-Over Presets: <input name="MN" class="m" type="number" min="0" max="250" required><br>

0 commit comments

Comments
 (0)