Skip to content

Commit dffab41

Browse files
committed
Refactor settings
1 parent bcc1063 commit dffab41

File tree

3 files changed

+138
-162
lines changed

3 files changed

+138
-162
lines changed

InteractiveHtmlBom/web/ibom.js

Lines changed: 37 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
var bomsplit;
44
var canvassplit;
5-
var canvaslayout = "default";
6-
var bomlayout = "default";
75
var initDone = false;
86
var bomSortFunction = null;
97
var currentSortColumn = null;
@@ -13,9 +11,6 @@ var highlightHandlers = [];
1311
var moduleIndexToHandler = {};
1412
var highlightedModules = [];
1513
var highlightedNet = null;
16-
var checkboxes = [];
17-
var bomCheckboxes = "";
18-
var highlightpin1 = false;
1914
var lastClicked;
2015

2116
function dbg(html) {
@@ -31,37 +26,37 @@ function redrawIfInitDone() {
3126

3227
function padsVisible(value) {
3328
writeStorage("padsVisible", value);
34-
renderPads = value;
29+
settings.renderPads = value;
3530
redrawIfInitDone();
3631
}
3732

3833
function referencesVisible(value) {
3934
writeStorage("referencesVisible", value);
40-
renderReferences = value;
35+
settings.renderReferences = value;
4136
redrawIfInitDone();
4237
}
4338

4439
function valuesVisible(value) {
4540
writeStorage("valuesVisible", value);
46-
renderValues = value;
41+
settings.renderValues = value;
4742
redrawIfInitDone();
4843
}
4944

5045
function tracksVisible(value) {
5146
writeStorage("tracksVisible", value);
52-
renderTracks = value;
47+
settings.renderTracks = value;
5348
redrawIfInitDone();
5449
}
5550

5651
function zonesVisible(value) {
5752
writeStorage("zonesVisible", value);
58-
renderZones = value;
53+
settings.renderZones = value;
5954
redrawIfInitDone();
6055
}
6156

6257
function dnpOutline(value) {
6358
writeStorage("dnpOutline", value);
64-
renderDnpOutline = value;
59+
settings.renderDnpOutline = value;
6560
redrawIfInitDone();
6661
}
6762

@@ -72,24 +67,25 @@ function setDarkMode(value) {
7267
topmostdiv.classList.remove("dark");
7368
}
7469
writeStorage("darkmode", value);
70+
settings.darkMode = value;
7571
redrawIfInitDone();
7672
}
7773

7874
function fabricationVisible(value) {
79-
renderFabrication = value;
8075
writeStorage("fabricationVisible", value);
76+
settings.renderFabrication = value;
8177
redrawIfInitDone();
8278
}
8379

8480
function silkscreenVisible(value) {
85-
renderSilkscreen = value;
8681
writeStorage("silkscreenVisible", value);
82+
settings.renderSilkscreen = value;
8783
redrawIfInitDone();
8884
}
8985

9086
function setHighlightPin1(value) {
9187
writeStorage("highlightpin1", value);
92-
highlightpin1 = value;
88+
settings.highlightpin1 = value;
9389
redrawIfInitDone();
9490
}
9591

@@ -107,11 +103,13 @@ function getStoredCheckboxRefs(checkbox) {
107103
return intref;
108104
}
109105
}
110-
var existingRefs = readStorage("checkbox_" + checkbox);
111-
if (!existingRefs) {
106+
if (!(checkbox in settings.checkboxStoredRefs)) {
107+
settings.checkboxStoredRefs[checkbox] = readStorage("checkbox_" + checkbox);
108+
}
109+
if (!settings.checkboxStoredRefs[checkbox]) {
112110
return new Set();
113111
} else {
114-
return new Set(existingRefs.split(",").map(r => convert(r)));
112+
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)));
115113
}
116114
}
117115

@@ -155,7 +153,8 @@ function createCheckboxChangeHandler(checkbox, references) {
155153
refsSet.delete(ref[1]);
156154
}
157155
}
158-
writeStorage("checkbox_" + checkbox, [...refsSet].join(","));
156+
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
157+
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
159158
updateCheckboxStats(checkbox);
160159
}
161160
}
@@ -237,11 +236,11 @@ function highlightFilter(s) {
237236
function checkboxSetUnsetAllHandler(checkboxname) {
238237
return function() {
239238
var checkboxnum = 0;
240-
while (checkboxnum < checkboxes.length &&
241-
checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
239+
while (checkboxnum < settings.checkboxes.length &&
240+
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
242241
checkboxnum++;
243242
}
244-
if (checkboxnum >= checkboxes.length) {
243+
if (checkboxnum >= settings.checkboxes.length) {
245244
return;
246245
}
247246
var allset = true;
@@ -328,7 +327,7 @@ function populateBomHeader() {
328327
return 0;
329328
}
330329
}
331-
for (var checkbox of checkboxes) {
330+
for (var checkbox of settings.checkboxes) {
332331
th = createColumnHeader(
333332
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox));
334333
th.onclick = fancyDblClickHandler(
@@ -379,7 +378,7 @@ function populateBomBody() {
379378
moduleIndexToHandler = {};
380379
currentHighlightedRowId = null;
381380
var first = true;
382-
switch (canvaslayout) {
381+
switch (settings.canvaslayout) {
383382
case 'F':
384383
bomtable = pcbdata.bom.F;
385384
break;
@@ -412,7 +411,7 @@ function populateBomBody() {
412411
td.textContent = rownum;
413412
tr.appendChild(td);
414413
// Checkboxes
415-
for (var checkbox of checkboxes) {
414+
for (var checkbox of settings.checkboxes) {
416415
if (checkbox) {
417416
td = document.createElement("TD");
418417
var input = document.createElement("input");
@@ -536,23 +535,23 @@ function changeCanvasLayout(layout) {
536535
switch (layout) {
537536
case 'F':
538537
document.getElementById("fl-btn").classList.add("depressed");
539-
if (bomlayout != "bom-only") {
538+
if (settings.bomlayout != "bom-only") {
540539
canvassplit.collapse(1);
541540
}
542541
break;
543542
case 'B':
544543
document.getElementById("bl-btn").classList.add("depressed");
545-
if (bomlayout != "bom-only") {
544+
if (settings.bomlayout != "bom-only") {
546545
canvassplit.collapse(0);
547546
}
548547
break;
549548
default:
550549
document.getElementById("fb-btn").classList.add("depressed");
551-
if (bomlayout != "bom-only") {
550+
if (settings.bomlayout != "bom-only") {
552551
canvassplit.setSizes([50, 50]);
553552
}
554553
}
555-
canvaslayout = layout;
554+
settings.canvaslayout = layout;
556555
writeStorage("canvaslayout", layout);
557556
resizeAll();
558557
populateBomTable();
@@ -671,9 +670,9 @@ function changeBomLayout(layout) {
671670
onDragEnd: resizeAll
672671
});
673672
}
674-
bomlayout = layout;
673+
settings.bomlayout = layout;
675674
writeStorage("bomlayout", layout);
676-
changeCanvasLayout(canvaslayout);
675+
changeCanvasLayout(settings.canvaslayout);
677676
}
678677

679678
function focusFilterField() {
@@ -685,7 +684,7 @@ function focusRefLookupField() {
685684
}
686685

687686
function toggleBomCheckbox(bomrowid, checkboxnum) {
688-
if (!bomrowid || checkboxnum > checkboxes.length) {
687+
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
689688
return;
690689
}
691690
var bomrow = document.getElementById(bomrowid);
@@ -697,11 +696,11 @@ function toggleBomCheckbox(bomrowid, checkboxnum) {
697696

698697
function checkBomCheckbox(bomrowid, checkboxname) {
699698
var checkboxnum = 0;
700-
while (checkboxnum < checkboxes.length &&
701-
checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
699+
while (checkboxnum < settings.checkboxes.length &&
700+
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
702701
checkboxnum++;
703702
}
704-
if (!bomrowid || checkboxnum >= checkboxes.length) {
703+
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
705704
return;
706705
}
707706
var bomrow = document.getElementById(bomrowid);
@@ -712,24 +711,23 @@ function checkBomCheckbox(bomrowid, checkboxname) {
712711
}
713712

714713
function setBomCheckboxes(value) {
715-
bomCheckboxes = value;
716714
writeStorage("bomCheckboxes", value);
715+
settings.checkboxes = value.split(",").filter((e) => e);
717716
prepCheckboxes();
718717
populateBomTable();
719718
}
720719

721720
function prepCheckboxes() {
722-
checkboxes = bomCheckboxes.split(",").filter((e) => e);
723721
var table = document.getElementById("checkbox-stats");
724722
while (table.childElementCount > 1) {
725723
table.removeChild(table.lastChild);
726724
}
727-
if (checkboxes.length) {
725+
if (settings.checkboxes.length) {
728726
table.style.display = "";
729727
} else {
730728
table.style.display = "none";
731729
}
732-
for (var checkbox of checkboxes) {
730+
for (var checkbox of settings.checkboxes) {
733731
var tr = document.createElement("TR");
734732
var td = document.createElement("TD");
735733
td.innerHTML = checkbox;
@@ -823,94 +821,6 @@ document.onkeydown = function(e) {
823821
}
824822
}
825823

826-
function getStorageBooleanOrDefault(storageString, def) {
827-
var b = readStorage(storageString);
828-
if (b === null) {
829-
b = def;
830-
} else {
831-
b = (b == "true");
832-
}
833-
return b;
834-
}
835-
836-
function initDefaults() {
837-
bomlayout = readStorage("bomlayout");
838-
if (bomlayout === null) {
839-
bomlayout = config.bom_view;
840-
}
841-
if (!['bom-only', 'left-right', 'top-bottom'].includes(bomlayout)) {
842-
bomlayout = config.bom_view;
843-
}
844-
canvaslayout = readStorage("canvaslayout");
845-
if (canvaslayout === null) {
846-
canvaslayout = config.layer_view;
847-
}
848-
bomCheckboxes = readStorage("bomCheckboxes");
849-
if (bomCheckboxes === null) {
850-
bomCheckboxes = config.checkboxes;
851-
}
852-
document.getElementById("bomCheckboxes").value = bomCheckboxes;
853-
854-
var b = getStorageBooleanOrDefault("padsVisible", config.show_pads);
855-
document.getElementById("padsCheckbox").checked = b;
856-
padsVisible(b);
857-
858-
b = getStorageBooleanOrDefault("fabricationVisible", config.show_fabrication);
859-
document.getElementById("fabricationCheckbox").checked = b;
860-
fabricationVisible(b);
861-
862-
b = getStorageBooleanOrDefault("silkscreenVisible", config.show_silkscreen);
863-
document.getElementById("silkscreenCheckbox").checked = b;
864-
silkscreenVisible(b);
865-
866-
b = getStorageBooleanOrDefault("referencesVisible", true);
867-
document.getElementById("referencesCheckbox").checked = b;
868-
referencesVisible(b);
869-
870-
b = getStorageBooleanOrDefault("valuesVisible", true);
871-
document.getElementById("valuesCheckbox").checked = b;
872-
valuesVisible(b);
873-
874-
if ("tracks" in pcbdata) {
875-
b = getStorageBooleanOrDefault("tracksVisible", true);
876-
document.getElementById("tracksCheckbox").checked = b;
877-
tracksVisible(b);
878-
879-
b = getStorageBooleanOrDefault("zonesVisible", true);
880-
document.getElementById("zonesCheckbox").checked = b;
881-
zonesVisible(b);
882-
} else {
883-
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
884-
tracksVisible(false);
885-
zonesVisible(false);
886-
}
887-
888-
b = getStorageBooleanOrDefault("dnpOutline", false);
889-
document.getElementById("dnpOutlineCheckbox").checked = b;
890-
dnpOutline(b);
891-
892-
b = getStorageBooleanOrDefault("redrawOnDrag", config.redraw_on_drag);
893-
document.getElementById("dragCheckbox").checked = b;
894-
setRedrawOnDrag(b);
895-
896-
b = getStorageBooleanOrDefault("darkmode", config.dark_mode);
897-
document.getElementById("darkmodeCheckbox").checked = b;
898-
setDarkMode(b);
899-
900-
b = getStorageBooleanOrDefault("highlightpin1", config.highlight_pin1);
901-
document.getElementById("highlightpin1Checkbox").checked = b;
902-
setHighlightPin1(b);
903-
904-
boardRotation = readStorage("boardRotation");
905-
if (boardRotation === null) {
906-
boardRotation = config.board_rotation * 5;
907-
} else {
908-
boardRotation = parseInt(boardRotation);
909-
}
910-
document.getElementById("boardRotation").value = boardRotation / 5;
911-
document.getElementById("rotationDegree").textContent = boardRotation;
912-
}
913-
914824
window.onload = function(e) {
915825
initUtils();
916826
initRender();
@@ -926,7 +836,7 @@ window.onload = function(e) {
926836
initDone = true;
927837
prepCheckboxes();
928838
// Triggers render
929-
changeBomLayout(bomlayout);
839+
changeBomLayout(settings.bomlayout);
930840
}
931841

932842
window.onresize = resizeAll;

0 commit comments

Comments
 (0)