|
105 | 105 |
|
106 | 106 | <script> |
107 | 107 | var Api = (function () { |
| 108 | + // polyfill for jQuery |
108 | 109 | var $ = (sel) => Array.from(document.querySelectorAll(sel)); |
109 | 110 | var boxlist = $('.item input'); |
110 | | - var indexes = {}; |
| 111 | + var indexes = {}; // memory for box clicks |
111 | 112 | var self; |
112 | 113 |
|
113 | | - function reverser(bool) { |
114 | | - var [start, end] = [indexes.last, indexes.this].sort(); |
| 114 | + function setChecked(bool) { |
| 115 | + // ensure lower index comes first |
| 116 | + var [start, end] = [indexes.last, indexes.next].sort(); |
115 | 117 | var arr = boxlist.slice(start, end + 1); |
116 | | - arr.forEach(el => el.checked = bool); |
| 118 | + arr.forEach((el) => el.checked = bool); |
117 | 119 | } |
118 | 120 |
|
119 | | - function updateLast(evt, num) { |
120 | | - indexes.last = evt.shiftKey ? indexes.this : num; |
121 | | - indexes.this = num; |
122 | | - reverser(evt.target.checked); |
| 121 | + function revIndexes(evt, num) { |
| 122 | + indexes.last = evt.shiftKey ? indexes.next : num; |
| 123 | + indexes.next = num; |
| 124 | + setChecked(evt.target.checked); // replicate this state |
123 | 125 | } |
124 | 126 |
|
125 | 127 | function doBinding(arr) { |
126 | 128 | arr.forEach((ele, idx) => { |
127 | | - ele.addEventListener('click', (evt) => updateLast(evt, idx)); |
| 129 | + ele.addEventListener('click', (evt) => revIndexes(evt, idx)); |
128 | 130 | }); |
129 | 131 | return self; |
130 | 132 | } |
|
0 commit comments