Skip to content

Commit 92b7a54

Browse files
committed
Use whole checkbox cell for touch events
Also fix keyboard shortcuts for checkboxes not working when they are reordered relative to other columns. Fixes #455
1 parent 002d627 commit 92b7a54

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

InteractiveHtmlBom/web/ibom.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,15 @@ function setBomCheckboxState(checkbox, element, references) {
184184
element.indeterminate = (state == "indeterminate");
185185
}
186186

187-
function createCheckboxChangeHandler(checkbox, references, row) {
188-
return function () {
187+
function createCheckboxHandlers(input, checkbox, references, row) {
188+
var clickHandler = () => {
189189
refsSet = getStoredCheckboxRefs(checkbox);
190190
var markWhenChecked = settings.markWhenChecked == checkbox;
191191
eventArgs = {
192192
checkbox: checkbox,
193193
refs: references,
194194
}
195-
if (this.checked) {
195+
if (input.checked) {
196196
// checkbox ticked
197197
for (var ref of references) {
198198
refsSet.add(ref[1]);
@@ -224,6 +224,22 @@ function createCheckboxChangeHandler(checkbox, references, row) {
224224
updateCheckboxStats(checkbox);
225225
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
226226
}
227+
228+
return [
229+
(e) => {
230+
clickHandler();
231+
},
232+
(e) => {
233+
e.preventDefault();
234+
if (row.onmousemove) row.onmousemove();
235+
},
236+
(e) => {
237+
e.preventDefault();
238+
input.checked = !input.checked;
239+
input.indeterminate = false;
240+
clickHandler();
241+
}
242+
];
227243
}
228244

229245
function clearHighlightedFootprints() {
@@ -679,7 +695,7 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
679695
td = document.createElement("TD");
680696
var input = document.createElement("input");
681697
input.type = "checkbox";
682-
input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
698+
[input.onchange, td.ontouchstart, td.ontouchend] = createCheckboxHandlers(input, checkbox, references, tr);
683699
setBomCheckboxState(checkbox, input, references);
684700
if (input.checked && settings.markWhenChecked == checkbox) {
685701
tr.classList.add("checked");
@@ -1035,7 +1051,8 @@ function toggleBomCheckbox(bomrowid, checkboxnum) {
10351051
return;
10361052
}
10371053
var bomrow = document.getElementById(bomrowid);
1038-
var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
1054+
var childNum = checkboxnum + settings.columnOrder.indexOf("checkboxes");
1055+
var checkbox = bomrow.childNodes[childNum].childNodes[0];
10391056
checkbox.checked = !checkbox.checked;
10401057
checkbox.indeterminate = false;
10411058
checkbox.onchange();
@@ -1051,7 +1068,8 @@ function checkBomCheckbox(bomrowid, checkboxname) {
10511068
return;
10521069
}
10531070
var bomrow = document.getElementById(bomrowid);
1054-
var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
1071+
var childNum = checkboxnum + 1 + settings.columnOrder.indexOf("checkboxes");
1072+
var checkbox = bomrow.childNodes[childNum].childNodes[0];
10551073
checkbox.checked = true;
10561074
checkbox.indeterminate = false;
10571075
checkbox.onchange();

0 commit comments

Comments
 (0)